2015-05-15 75 views
0

我想多次運行腳本,使用不同的路徑作爲參數,並查看輸出。無法獲取從python運行的shell腳本輸出

如果我在命令提示符下運行與參數path_to_code/code1.cpp腳本path/lizard

path/lizard path_to_code/code1.cpp 

我得到的輸出 - 我想對多個文件運行此腳本。在this和類似的問題

看,我試過

import os, glob 

def run_command(command): 
    os.system(command)  

program = '"C:/Python27/Scripts/lizard.bat "' 
path = '"path_to_code/*.cpp"' 
for path1 in glob.glob(path): 
    command = program + path1 
    run_command(command) 

無輸出。

import glob, subprocess 

def run_command(command): 
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    out, err = p.communicate() 
    print out 

program = '"C:/Python27/Scripts/lizard.bat "' 
path = '"path_to_code/*.cpp"' 
for path1 in glob.glob(path): 
    command = program + path1 
    run_command(command) 

沒有輸出。

(當然,我想通過目錄遞歸迭代,但這是下一步)。

如何獲得從腳本運行的程序的輸出?我認爲從邏輯上說,兩個版本都應該讓我輸出......我做錯了什麼?

+0

的路徑python腳本週圍的雙引號尾隨空間看起來我錯了。除去幫助嗎? –

+0

http://stackoverflow.com/questions/4760215/running-shell-command-from-python-and-capturing-the-output – Doon

+0

沒有它的@EtanReisner,路徑和參數在一個字符串中,沒有這樣的程序。 – Thalia

回答

0

基礎上,評論我的問題,我想

program = 'C:/Python27/Scripts/lizard.bat' 
... 
command = [program, path1] 

工作 - 然後我意識到,報價是問題,鵝潭雷斯納是正確的。消除它們使它工作。

完全糾正代碼:

​​
1

嘗試使用subprocess.check_output

它應該做你想要什麼。

[~] cat foo.sh 
#!/bin/sh 

echo "Hello World!" 

[~] python2.7 
Python 2.7.6 (default, Sep 9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> foo = subprocess.check_output('./foo.sh') 
>>> foo 
'Hello World!\n' 
>>> 

所以在你的具體例子

def run_command(command): 
    return subprocess.check_output(command,stderr=subprocess.STDOUT) 
+0

謝謝 - 我的錯誤在於我如何撰寫了由Ethan Reisner抓住的論點。這對我來說仍然是一個很好的學習 – Thalia

1

從我看到你忘了打電話給在溝通的過程。嘗試

def run_command(command): 
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    stdout, stderr = p.communicate() 
    return iter(stdout, b'') 

https://docs.python.org/2/library/subprocess.html?highlight=popen.communicate#subprocess.Popen.communicate

乾杯

+0

Doon的答案可能更適合您的需求,但限制您使用Python 2.7(如果這是您的任何擔憂;)) – Goldfishslayer

+0

謝謝,我確實嘗試了溝通......我寫道在評論中......我的錯誤在於我如何撰寫論據,這是由Ethan Reisner抓到的 – Thalia

+0

啊,我的壞...一些評論被隱藏,我錯過了他們... – Goldfishslayer