【问题标题】:How to use '>>' in popen subprocess如何在 popen 子进程中使用“>>”
【发布时间】:2013-10-21 08:37:19
【问题描述】:

我正在尝试从 python 文件 (2.7) 运行命令:

p=subprocess.Popen("sha256sum file1.zip >> file2.sha")

但我收到一个错误,即文件“>>”不存在。 我试过了:

p=subprocess.Popen("sha256sum file1.zip >> file2.sha".split())

>> 仍然是个问题。

当然,如果我在提示行中运行命令,它会运行 Ok 并将输出放入文件 file2.sha。

我知道我可以将标准输出添加到 Popen,但我想知道是否有一种方法可以像从命令行运行一样简单。

谢谢。

【问题讨论】:

标签: python subprocess popen


【解决方案1】:

您可以像这样将子进程的标准输入和标准输出的值传递给 Popen:

subprocess.Popen("sha256sum file1.zip", stdout = file("file2.sha", "a"))

注意文件需要以追加模式打开才能实现与>>相同的行为。

【讨论】:

  • 谢谢本。 warwaruk 答案也有效,但我读到它可能会导致使用“shall”和用户输入(它获取文件名)导致安全问题,所以我将使用 stdout 代替。
  • 为了在父进程中关闭文件时更明确,您可以使用with-statement: with open('file2.sha', 'ab') as file: subprocess.check_call(["sha256sum", "file1.zip"], stdout=file)
【解决方案2】:

我认为你应该使用shell=True argumentPopen

如果shell为True,指定的命令将通过 壳。如果您主要将 Python 用于 它在大多数系统外壳上提供的增强控制流,并且仍然需要 方便访问其他外壳功能,例如外壳管道, 文件名通配符、环境变量扩展、~的扩展 到用户的主目录。

subprocess.Popen("sha256sum file1.zip >> file2.sha", shell=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多