我有两个.py文件。第一个文件执行第二个文件,还需要能够向第二个文件发送参数。
这是file1.py:
from subprocess import Popen, PIPE
import sys
file_names = ['one.csv' , 'two.csv']
for f in file_names:
process = Popen([sys.executable , "file2.py"] , stdout = PIPE , stdin = PIPE)
process.communicate(f)
这是file2.py:
def c(x):
print x
c(f)
第一个文件成功执行第二个文件,但未将参数f传递给第二个文件。我也尝试过使用process.stdin.write(f)而不是process.communicate(f),但这也不起作用,我宁愿使用communication而不是stdin,因为file2.py的多个实例需要是在没有阻止的情况下同时执行。
答案 0 :(得分:0)
当你这样做时:
process.communicate(f)
你正在写入process
的标准输入;问题是后一个程序必须从其输入流中读取数据才能使用它。您可以将file2.py
更改为:
import sys
def c(x):
print x
for f in sys.stdin:
c(f)
您似乎认为communicate()
允许父进程和子进程共享变量绑定;事实并非如此。正如您的问题中所写,file2.py
会产生错误name 'f' is not defined
。