我有一个 Python 脚本。我们称之为controller.py。我想使用controller.py运行另一个 Python 脚本并将几个变量传递给它。让我们调用第二个脚本分析器.py。
在不将Analyzer.py作为模块导入的情况下执行此操作的最佳方法是什么?以及如何在该脚本中引用我传递给analyzer.py的变量?
这是我使用子流程的失败尝试:
控制器.py
import subprocess
var1='mytxt'
var2=100
var3=True
var4=[['x','y','z'],['x','c','d']]
var5=r"C:\\Users\\me\\file.txt"
myargs=var1,var2,var3,var4,var5
my_lst_str = ' '.join(map(str, myargs))
my_lst_str ='python analyzer.py '+my_lst_str
subprocess.call(my_lst_str,shell=True)
Run Code Online (Sandbox Code Playgroud)
分析器.py
print 'Argument List:', str(sys.argv)
Run Code Online (Sandbox Code Playgroud)
我在 Stack Overflow 上看过类似的问题。我尝试过的一个经常推荐的解决方案是将analyzer.py 作为模块导入,但analyzer.py 定义了许多不同的函数。将其用作模块会创建许多嵌套函数,并且在这些嵌套函数中管理变量的范围很麻烦。
我需要为这些脚本使用 Python 2。我在 Windows 10 机器上。
1-exec命令:
蟒蛇2:
execfile('test.py')
Run Code Online (Sandbox Code Playgroud)
蟒蛇3:
exec(open('test.py').read())
Run Code Online (Sandbox Code Playgroud)
2-os命令:
测试1.py:
import os
#os.system('python test2.py')
os.system("python test2.py arg1 arg2")
Run Code Online (Sandbox Code Playgroud)
测试2.py:
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
Run Code Online (Sandbox Code Playgroud)
3-subprocess命令:
from subprocess import call
call(["python", "test.py"])
Run Code Online (Sandbox Code Playgroud)
用于传递参数和 shell 命令使用subprocess(请参阅此链接):
import subprocess
# Simple command
subprocess.call(['ls', '-1'], shell=True)
Run Code Online (Sandbox Code Playgroud)
另一个示例代码:
文件1.py:
args ='python file2.py id ' + 1
subprocess.call(args)
Run Code Online (Sandbox Code Playgroud)
文件2.py:
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
Run Code Online (Sandbox Code Playgroud)
4- socket pogramming:在您可以使用的两个或多个 python 文件之间共享数据socket programming:请参阅此链接。