Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用一个Python脚本运行另一个Python脚本并向其传递变量?_Python_Python 2.x - Fatal编程技术网

如何使用一个Python脚本运行另一个Python脚本并向其传递变量?

如何使用一个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

我有一个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'],['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),然后测试你的代码