Flutter集成Python脚本执行插件python_shell的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter集成Python脚本执行插件python_shell的使用



python_shell

Dart和Flutter的Python环境管理器和执行器


适用于:

  • Dart, Flutter

支持平台:

  • Windows 10+ (x86, amd64, arm64)
  • Linux发行版 (amd64, arm64)
  • OSX 11+ (amd64, arm64)




安装 #

  • 通过命令行添加
flutter(dart) pub add python_shell
  • pubspec.yaml中添加依赖
dependencies:
    [其他依赖...]

    python_shell:
        git:
            url: git://github.com/eseunghwan/python_shell.dart.git
            ref: master



使用 #

  • 基础用法
import "package:python_shell/python_shell.dart";

var shell = PythonShell();
await shell.initialize();

await shell.runString("{pythonCode}");
  • 使用实例
import "package:python_shell/python_shell.dart";

PythonShell().initialize();
var instance = ShellManager.getInstance("default");
await instance.runString("{pythonCode}");

  • 处理消息、错误和完成事件
// 配置如上...
shell.runString(
    "{pythonCode}",
    listener: ShellListener(
        onMessage: (message) {
            // 如果 `echo` 为 `true`,则自动打印到控制台
            print("message!");
        },
        onError: (e, s) {
            print("error!");
        },
        onComplete: () {
            print("complete!");
        }
    )
);

更多详细信息,请参阅shell.dart


示例代码

import "package:python_shell/python_shell.dart";

void main() async {
    // 当前样式
//     var shell = PythonShell(shellConfig: PythonShellConfig(
//         pythonRequires: [ "PySide6" ],
//         defaultWorkingDirectory: "example"
//     ));
//     await shell.initialize();

//     await shell.runString("""
// import os, PySide6

// print("in python: ", os.getcwd())
// print("in python: ", PySide6)
// """, useInstance: true, instanceName: "testInstance1", listener: ShellListener(
//         completeCallback: () {
//             print(shell.resolved);
//             // shell.clear();
//         }
//     ));

    var shell = PythonShell(PythonShellConfig());
    await shell.initialize();

    var instance = ShellManager.getInstance("default");
    instance.installRequires([ "PySide6" ]);
    await instance.runString("""
import os, PySide6

print("in python: ", os.getcwd())
print("in python: ", PySide6)
""", echo: true);

    print("finished");
}

更多关于Flutter集成Python脚本执行插件python_shell的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Python脚本执行插件python_shell的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成Python脚本执行,可以使用python_shell插件。这个插件允许你从Flutter应用中调用并执行Python代码。以下是一个简单的示例,展示如何在Flutter项目中集成并使用python_shell插件。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加python_shell依赖:

dependencies:
  flutter:
    sdk: flutter
  python_shell: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 配置Android和iOS(如果需要)

python_shell插件主要依赖于设备的操作系统来执行Python代码。在Android设备上,通常需要有Python环境支持。iOS设备上的支持可能需要额外的配置,这里我们主要关注Android。

确保你的Android设备或模拟器上已安装Python。如果没有,你可以通过ADB或其他方式安装。

步骤 3: 使用python_shell插件

下面是一个简单的Flutter应用示例,展示如何使用python_shell插件执行Python脚本:

import 'package:flutter/material.dart';
import 'package:python_shell/python_shell.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String result = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Python Shell Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Python Script Result:'),
              Text(result, style: TextStyle(fontSize: 20)),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _runPythonScript,
                child: Text('Run Python Script'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _runPythonScript() async {
    final PythonShell pythonShell = PythonShell();

    // 定义要执行的Python脚本
    String script = '''
import datetime
result = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(result)
''';

    try {
      // 执行Python脚本并获取结果
      String output = await pythonShell.run(script);
      setState(() {
        result = output.trim(); // 去除结果中的多余换行符
      });
    } catch (e) {
      setState(() {
        result = 'Error: ${e.message}';
      });
    }
  }
}

解释

  1. 依赖导入:导入flutter/material.dartpython_shell/python_shell.dart
  2. UI布局:使用MaterialAppScaffold创建基本的UI布局,包括一个显示结果的Text和一个触发脚本执行的ElevatedButton
  3. Python脚本执行:在_runPythonScript方法中,创建一个PythonShell实例,定义要执行的Python脚本,并调用run方法执行脚本。脚本执行结果通过setState更新到UI上。

注意事项

  • 确保设备上已安装Python,并且路径配置正确。
  • 对于iOS设备,可能需要更多的配置工作来支持Python脚本的执行。
  • 考虑到安全性和性能问题,执行外部脚本时要谨慎处理输入和输出。

这个示例提供了一个基本的框架,你可以根据具体需求扩展和修改。

回到顶部