我有下面的代碼,我正在使用它來檢查程序類轉儲是否存在於系統上。該程序只返回一個空白。Python中的等價命令
cmd = ["which","class-dump"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print process.stdout.read()
此代碼始終返回空格。從技術上講,它應該正確嗎?
我有下面的代碼,我正在使用它來檢查程序類轉儲是否存在於系統上。該程序只返回一個空白。Python中的等價命令
cmd = ["which","class-dump"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print process.stdout.read()
此代碼始終返回空格。從技術上講,它應該正確嗎?
嗯,它看起來像類轉儲不存在(在你的Python解釋器使用的PATH)
我在我的機器上嘗試了以下操作,並且完美地工作。
import subprocess
cmd = ["which","java"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print process.communicate()
這是輸出
('/usr/bin/java\n', None)
此代碼做同樣的事情作爲外殼which
命令編程,但它並沒有「找到」的符號鏈接。爲了支持這一點,你可以增強isx
函數。
import os.path, itertools
isx = lambda program: lambda folder: (lambda p: \
os.access(p, os.X_OK) and os.path.isfile(p))(os.path.join(folder, program))
def which(program):
try:
return itertools.ifilter(isx(program), os.environ['PATH'].split(':')).next()
except StopIteration:
raise ValueError, 'no executable file named %s found in search path' % (program,)
實施例使用:
>>> which('ls')
'/bin'
>>> which('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in which
ValueError: no executable file named foo found in search path
不'其中類dump'產生在命令行上一個非空輸出? –
否,它返回類轉儲的路徑。我想通過代碼本身獲得路徑。 – Amritha