如何给'>'作为python中终端的参数

时间:2014-08-24 18:32:26

标签: linux terminal python

我想知道你是否可以帮我解决问题:

在python中我一直试图给'>'到subprocess.Popen([])或subprocess.call([]),但它以某种方式改变了它在终端中输入的方式。一个例子。

终端命令:

iperf -s -u -y C > data.csv

Python代码:

import subprocess as sub

sub.Popen(['iperf', '-s', '-u', '-y', 'C', '>', 'data.csv'])

sub.Popen(['{iperf', '-s', '-u', '-y', 'C}', '>', 'data.csv'])

当我在终端中运行第一个命令时,它会执行得很好,但是当我执行第二个命令时,它将完全忽略'>'和'data.csv':

$ python test.py
iperf: ignoring extra argument -- >
iperf: ignoring extra argument -- data.csv

第三个命令返回:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 3, in <module>
    sub.call(['{iperf', '-s', '-u', '-y', 'C}', '>', 'data.csv'])
  File "/usr/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

我试过在这个问题上搜索DuckDuckGo和Google,但我找不到答案,因为他们不会解释'&gt;'符号,即使用作“&gt;”。

我期待你的回答,非常感谢!

2 个答案:

答案 0 :(得分:5)

&gt;由shell解释而不是由程序解释。由于默认情况下子进程不使用shell,因此&gt;直接传递给程序。使用shell=True可能有效,但要重定向stdout,您应该使用stdout参数。

例如,您可以使用

import subprocess

with open('data.csv', 'w') as f:
    subprocess.Popen(['iperf', '-s', '-u', '-y', 'C'], stdout=f)

答案 1 :(得分:1)

将命令作为字符串传递,并向subprocess发出shell=True的shell命令信号:

import subprocess

print subprocess.call([
    "echo beer > zoot"
], shell=True)

输出

0