【问题标题】:How to give '>' as parameter to terminal in python如何在python中将'>'作为参数提供给终端
【发布时间】:2014-08-24 18:32:25
【问题描述】:

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

在 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 上搜索这个问题,但我找不到答案,因为他们不会解释“>”符号,即使用作“>”也是如此。

期待您的回答,非常感谢!

【问题讨论】:

    标签: linux terminal python


    【解决方案1】:

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

    例如,您可以使用

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

    【讨论】:

    【解决方案2】:

    将命令作为字符串传递,并向subprocess 发送信号,这是一个带有shell=True 的shell 命令:

    来源

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

    输出

    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      相关资源
      最近更新 更多