我试着做下面的事情来打印3和4:
input.txt
1
2
3
4
program1.py
import subprocess
inputfile = open('input.txt', 'r')
inputfile.readline()
inputfile.readline()
subprocess.call('python program2.py',stdin=inputfile)
inputfile.close()
program2.py
while True:
print raw_input()
它将不打印任何内容。但是如果我去掉readlines(),它会打印1到4。
我如何使用一个文件在某一行开始为一个子进程的标准输入?
您可以使用Popen()
和.communicate()
代替call()
。我不完全确定为什么call()
不工作在你的情况下,但以下将工作-
program1.py
import subprocess
import sys
inputfile = open('input.txt', 'r')
inputfile.readline()
inputfile.readline()
p = subprocess.call(['python', 'program2.py'],stdin=subprocess.PIPE,stdout=sys.stdout)
p.communicate(inputfile.read())
inputfile.close()
.decode()
需要,因为communicate()
需要字节字符串,而不是普通字符串。我还将该过程的stdout
重定向到脚本的stdout
,以便打印结果。另外,写program2.py
的更好的方法是-
import sys
for l in sys.stdin:
print l
这不会导致program2.py
进入无限循环。
例子/演示-
我有两个文件,a.py
和b.py
-
a.py——
import subprocess
import sys
inputfile = open('input.txt', 'r')
inputfile.readline()
inputfile.readline()
p = subprocess.Popen(['/usr/bin/python', 'b.py'],stdin=subprocess.PIPE,stdout=sys.stdout)
p.communicate(inputfile.read())
inputfile.close()
b.py——
import sys
for l in sys.stdin:
print l
a.py
运行结果-
3
4