我正在尝试执行以下操作来打印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就好了。
如何使用从特定行开始的文件作为子进程的stdin?
答案 0 :(得分:0)
您可以使用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