2015-02-23 51 views
0

通過Python:PS -o CMD = <PID>不給同一輸出從Python的

output = os.popen("ps -o cmd=1").read() 
print output 

輸出:

1 
/bin/bash 
python myPython.pyc 
sh -c ps -o cmd=1 
ps -o cmd=1 

但是當我從終端運行該命令將返回我想要的東西:

/sbin/init 

另外,當我從python運行「ls -l」命令時,它返回正確的東西。


我的主要目的是從Python的PID中找到進程的名字。 我該怎麼辦?

+1

我會注意這個在Python文檔的'popen'「因爲2.6版本不推薦使用:。這個函數是廢棄使用子模塊檢查特別是更換舊的功能與子模塊部分」 – 2015-02-23 16:16:05

+0

我認爲更好的方法是打開並閱讀'/ proc/1/cmdline'。要麼或者解釋符號鏈接'/ proc/1/exe'。 – twalberg 2015-02-23 16:25:49

+0

@IanMcLaird我也試過子過程,但它給出了相同的輸出。 – furkantokac 2015-02-23 16:37:26

回答

1

這不回答關於爲什麼你不同的輸出問題,但更好的方法來解決你追求的目標是要麼:

  1. 打開並閱讀/proc/<pid>/cmdline,或
  2. 讀取符號鏈接/proc/<pid>/exe

編輯:擺脫popen呼叫那裏,後來的「無用使用cat」的。做到這一點,而不是:

with open("/proc/"+data.get("pid")+"/cmdline") as cmd: 
    cmdinfo=cmd.read() 
command=cmdinfo.split("\0") 
print command[0] 
+0

我的代碼: 'print os.popen(「cat/proc /」+ data.get(「pid」)+「/ cmdline」)。read()' – furkantokac 2015-02-23 16:46:36

+0

@furkant查看編輯關於廢棄棄用'os.popen'和無用的'cat'使用... – twalberg 2015-02-23 17:04:38

+0

使用open()而不是cat命令有什麼好處? – furkantokac 2015-02-28 15:49:36

1

我知道你現在有一個答案,但原來的嘗試沒有成功的原因可能是因爲POPEN創造了一個全新的過程,因此不同的工藝環境。

當我從我的終端運行'ps -o cmd = 1'時,我得到了和使用popen時類似的結果。

1 
bash 
ps -o cmd=1