【发布时间】:2015-09-03 00:05:36
【问题描述】:
我使用的是 Mac OS X Yosemite 10.10 和 Python 2.7。
如果我在命令行中键入以下内容:du -g -d1 /Users 2> /dev/null,则一切正常。
现在,我的目标是在 python 脚本中使用该命令。
我的想法是使用以下内容:
import subprocess
output = subprocess.check_output(['du', '-g', '-d1', '/Users', '/dev/null'])
但我得到这个错误:
Traceback (most recent call last):
File "./verifications.py", line 1, in <module>
output = subprocess.check_output(['du', '-g', '-d1', '/Users', '/dev/null'])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 537, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['du', '-g', '-d1', '/Users', '/dev/null']' returned non-zero exit status 1
此外,当我在本地运行 subprocess.check_output(['du', '-g', '-d1', '/Users', '/dev/null']) 时一切正常,当我使用 Apple 的共享屏幕工具登录共享 iMac 时会发生错误。我感觉问题可能出在权限上,但我找不到任何东西。
【问题讨论】:
-
>/dev/null是重定向,而不是参数。也就是说,它在运行命令之前告诉shell如何为命令设置文件描述符,而实际上根本没有传递给du命令。 -
...哦——在你的问题前面你使用
2>/dev/null。这意味着不同的东西。请尽量保持一致。 -
但这仍然是docs.python.org/3.1/library/subprocess.html 使用它的方式。
-
该文档正在传递文字参数,而不是执行重定向。也就是说,它运行的是
ls -l /dev/null,而不是ls -l >/dev/null或ls -l 2>/dev/null。这三个是完全不同的命令。 -
哦,所以我想我有点混淆了。
标签: python macos subprocess