【问题标题】:Problems running terminal command via Python通过 Python 运行终端命令的问题
【发布时间】:2021-06-21 21:10:06
【问题描述】:

我正在做一个小项目,我需要通过 python 控制控制台播放器。此示例命令在 Linux 终端上完美运行:

mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)

在 Python 中,我正在执行以下操作:

command = """mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)""" 
os.system(command)

问题是当我使用 Python 尝试它时,它会在我运行它时给我一个错误:

sh: 1: Syntax error: "(" unexpected

我在这里真的很困惑,因为它是完全相同的字符串。为什么第二种方法不起作用?

谢谢。

【问题讨论】:

    标签: python linux bash


    【解决方案1】:

    您的默认用户 shell 可能是 bash。 Python 的os.system 命令在linux 中默认调用sh

    一种解决方法是使用subprocess.check_call() 并传递shell=True 作为参数告诉subprocess 使用您的默认用户shell 执行。

    import subprocess
    command = """mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)"""
    subprocess.check_call(command, shell=True)
    

    【讨论】:

    • 我尝试了您的建议,但出现了不同的错误:/bin/sh: 1: Syntax error: "(" unexpected 带有回溯...returned non-zero exit status 2。也试过这个subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE),但我得到/bin/sh: 1: Syntax error: "(" unexpected。尝试了很多东西,但似乎没有任何效果......
    • 非零退出通常表示命令在 Linux 中失败。我会检查mplayer 文档以找出错误是什么(如果有的话)。
    • 好的,我相信我会尽快完成这项工作。至少我现在知道为什么它不起作用。谢谢。
    【解决方案2】:

    您的 python 调用 'os.system' 可能只是使用了与您在终端上使用的不同的 shell: os.system() execute command under which linux shell?

    您使用 os.system 生成的 shell 可能不支持括号替换。

    【讨论】:

    【解决方案3】:
    import subprocess  
     
    COMND=subprocess.Popen('command',shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    COMND_bytes = COMND.stdout.read() + COMND.stderr.read()  
    print(COMND_bytes)
    

    【讨论】:

    • 请添加一些解释。目前尚不清楚为什么这在原始代码不起作用时起作用
    猜你喜欢
    • 2018-01-11
    • 2015-06-23
    • 2020-09-07
    • 2017-01-25
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多