Python - 使用重定向构造subprocess.popen

时间:2012-01-11 14:23:33

标签: python arguments redirect subprocess

我想用popen创建一个子进程。 特殊要求是在命令中使用shell方向。

args = [
    '/bin/cat',
    '<',
    'textfile',
    ]
process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                           env={'LANG':'de_DE@euro'})
processpid = process.pid
output = process.communicate()

我不想使用shell = True选项,因此我在这里向您提出问题,如何实现它。

此致 斯蒂芬

1 个答案:

答案 0 :(得分:9)

除非您正在调用的程序实现重定向(cat没有),否则不可能。要使用shell功能,您必须传递shell=True或明确调用shell。

OTOH,如果您只想阅读textfile,可以将其作为子流程stdin传递:

subprocess.Popen(args,
                 stdin=open("textfile"),
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                 env={'LANG':'de_DE@euro'})