1

我有两个 .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) 但这也不起作用,我宁愿使用通信而不是标准输入,因为 file2.py 的多个实例需要同时执行,不阻塞。

4

1 回答 1

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.

于 2013-08-20T21:40:10.193 回答