如何使用一个Python脚本运行另一个Python脚本并向其传递变量?
我有一个Python脚本。让我们称它为controller.py。我想使用controller.py运行另一个Python脚本并向其传递几个变量。让我们调用第二个脚本analyzer.py 如果不将analyzer.py作为模块导入,最好的方法是什么?如何在脚本中引用传递给analyzer.py的变量 下面是我使用子流程失败的尝试: controller.py如何使用一个Python脚本运行另一个Python脚本并向其传递变量?,python,python-2.x,Python,Python 2.x,我有一个Python脚本。让我们称它为controller.py。我想使用controller.py运行另一个Python脚本并向其传递几个变量。让我们调用第二个脚本analyzer.py 如果不将analyzer.py作为模块导入,最好的方法是什么?如何在脚本中引用传递给analyzer.py的变量 下面是我使用子流程失败的尝试: controller.py import subprocess var1='mytxt' var2=100 var3=True var4=[['x','y','z
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)
print 'Argument List:', str(sys.argv)
analyzer.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)
print 'Argument List:', str(sys.argv)
我已经研究了有关堆栈溢出的类似问题。我尝试过的一个经常推荐的解决方案是将analyzer.py作为模块导入,但analyzer.py定义了许多不同的函数。将它用作一个模块会创建许多嵌套函数,而在这些嵌套函数中管理变量的范围是很麻烦的
我需要为这些脚本使用Python 2。我在Windows 10计算机上。1-
exec
命令:
from subprocess import call
call(["python", "test.py"])
蟒蛇2:
execfile('test.py')
蟒蛇3:
exec(open('test.py').read())
2-os
命令:
from subprocess import call
call(["python", "test.py"])
test1.py:
import os
#os.system('python test2.py')
os.system("python test2.py arg1 arg2")
test2.py:
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
3-子流程
命令:
from subprocess import call
call(["python", "test.py"])
要传递参数和shell命令,请使用子流程
(请参见此):
另一个示例代码:
file1.py:
args ='python file2.py id ' + 1
subprocess.call(args)
file2.py:
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
4-
socket编程
:在两个或多个python文件之间共享数据您可以使用socket编程
:参见此。这是否回答了您的问题?我真的不明白作为模块导入analyzer.py如何创建嵌套函数。嵌套函数是在另一个函数中定义的函数。也许值得在这里分享一些实际的代码。如果您坚持不导入analyzer.py,可以将其作为单独的python进程与一起运行。导入模块是正常的,应该不会很麻烦。@thgro您是说analyzer import中的*
?因为那会影响一切。如果您只想从模块中导入一个函数,请仅导入该函数,例如从analyzer导入_函数。尽可能少地使用全局变量(可能为零:常数可以,但最好将其设为枚举)。如果函数需要变量,请将其作为参数传入。如果您一直传递相同的参数,请将它们分组为a或a。关于您尝试使用子流程的情况
:您不能仅将列表列表转换为字符串,然后指望python将其转换回来。你做事情很艰难,但如果你坚持的话,看看谢谢塔赫尔。我在问题中添加了一些试图使用子流程的代码。你能告诉我我在这个代码上做错了什么吗?在analyzer.py中导入sys,在subprocess.call中删除shell=True(my\u lst\u str,shell=True)=>subprocess.call(my\u lst\u str),然后测试你的代码