問題
問題是〜/下載路徑。當您調用subprocess.call
時,該擴展的shell環境未啓用。下面是這個問題的簡單演示:
>>> import shlex, subprocess, os, os.path
>>> cmd = "ls ~/Downloads"
>>> print os.popen(cmd).read()
ubuntu-11.04-desktop-i386.iso
ubuntu-11.04-server-i386.iso
>>> print subprocess.check_output(shlex.split(cmd))
ls: cannot access ~/Downloads: No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['ls', '~/Downloads']' returned non-zero exit status 2
的解決方案
有兩種解決方案,您可以使用,或者使用os.path.expanduser
拓展〜在Python或致電subprocess.call
/subprocess.check_output
與參數shell=True
。我傾向於使用check_output
而不是call
,因爲它返回可能由命令產生的任何輸出。以下任一解決方案都可以解決您的問題。
import shlex, subprocess, os, os.path
cmd = 'ls ' + os.path.expanduser('~/Downloads')
print subprocess.check_output(shlex.split(cmd))
cmd = 'ls ~/Downloads'
print subprocess.check_output(cmd, shell=True)
請說明「無法正常工作」。是否有任何子進程調用?你會得到什麼結果,一個例外? – dutt
我做了check_output,但它打印'',回答如下 –