【问题标题】:Invoking shell commands using os.system使用 os.system 调用 shell 命令
【发布时间】:2013-11-27 18:16:16
【问题描述】:

我正在尝试使用os.system 调用外部(管道)shell 命令:

srcFile = os.path.abspath(sys.argv[1])

srcFileIdCmd = "echo -n '%s' | cksum | cut -d' ' -f1" % srcFile

print "ID command: %s" % srcFileIdCmd

srcFileID = os.system(srcFileIdCmd)

print "File ID: %s" % srcFileID

输出

ID command: echo -n '/my/path/filename' | cksum | cut -d' ' -f1
File ID: 0

但是当我运行时

echo -n '/my/path/filename' | cksum | cut -d' ' -f1

在命令行上手动得到2379496500,而不是0。

我需要更改哪些内容才能从 shell 命令中获取正确的值?

【问题讨论】:

    标签: python system-calls


    【解决方案1】:

    使用

    sp = subprocess.Popen(["program", "arg"], stdout=subprocess.PIPE)
    

    ,然后从文件sp.stdout 中读取。有问题的 pgram 可以是一个 shell,您可以将复杂的 shell 命令作为参数传递给它 (["/usr/bin/bash", "-c", "my-complex-command"])。

    【讨论】:

    • 我用什么代替"program", "arg"
    • 你想调用哪个命令,作为参数你可以插入任何命令行参数列表。
    • 我从标准输出中得到的是<open file '<fdopen>', mode 'rb' at 0x10b4a8300>
    • sp.stdout 不是结果。它是命令输出的文件句柄。您需要读取该文件的输出。
    相关资源