我的 Python 脚本中有一个标志,它指定我是否设置和使用外部进程。这个过程是一个被调用的命令my_command
,它从标准输入中获取数据。如果我要在命令行上运行它,它会是这样的:
$ my_command < data > result
我想使用 Python 脚本data
通过修改标准输入并将其提供给my_command
.
我正在做这样的事情:
import getopt, sys, os, stat, subprocess
# for argument's sake, let's say this is set to True for now
# in real life, I use getopt.getopt() to decide whether this is True or False
useProcess = True
if useProcess:
process = subprocess.Popen(['my_command'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in sys.stdin:
# parse line from standard input and modify it
# we store the result in a variable called modified_line
modified_line = line + "foo"
# if we want to feed modified_line to my_command, do the following:
if useProcess:
process.stdin.write(modified_line)
# otherwise, we just print the modified line
else:
print modified_line
但是,它的my_command
行为就好像它没有收到任何数据并以错误状态退出。我究竟做错了什么?
编辑
假设我的 Python 脚本名为my_Python_script
. 假设我通常会传递一个通过标准输入my_command
调用的文件:data
$ my_command < data > result
但现在我将其传递给my_Python_script
:
$ my_Python_script < data > some_other_result
我想my_Python_script
有条件地设置一个my_command
在内容上运行的子进程(在传递给之前被data
修改)。这更有意义吗?my_Python_script
my_command
如果我bash
用作脚本语言,我会有条件地决定运行两个函数之一。一种是将数据线传输到my_command
. 另一个不会。这可以用 Python 完成吗?