【问题标题】:du -sh behaviour in terminal and from an python script?终端和python脚本中的du -sh行为?
【发布时间】:2012-11-28 01:41:47
【问题描述】:

关于my question at SuperUser,我面临一个令人费解的情况,即在终端使用du -sh /media/ExternalHd/myfolder/* 可以正常工作,但在python 脚本中使用p=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE) 会显示error du: cannot access /media/ExternalHd/myfolder/*: No such file or directory

【问题讨论】:

    标签: python linux shell terminal du


    【解决方案1】:

    终端会为您扩展 *。 告诉子进程这样做:

    p=subprocess.Popen('du -sh /tmp/*', shell=True)
    

    或者您可以使用 glob 模块自己扩展 *, 如果您需要更多控制

    【讨论】:

      【解决方案2】:

      您应该将参数shell=True 添加到您的 subprocess.Popen 函数中。这样您就可以调用 shell 并使用环境变量、文件 glob 等。

      p = subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE, shell=True)
      

      但是,您应该避免使用shell=True,因为存在安全隐患,请参阅python subprocess module docs 中的警告。对于像这样的小脚本,也许它不会产生问题,但请记住;)

      有关更多详细信息,请参阅this answer 另一个 stackoverflow 问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-13
        • 2015-05-27
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        相关资源
        最近更新 更多