如何使用subprocess.Popen进行通信,从一个python脚本向另一个python脚本发送参数?

时间:2013-08-20 17:41:25

标签: python-2.7 subprocess stdin popen

我有两个.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的多个实例需要是在没有阻止的情况下同时执行。

1 个答案:

答案 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