2017-03-25 11 views
0

私はシェルスクリプトを呼び出すpythonスクリプトを持っています。シェルスクリプトはiv4_consoleという.exeを呼び出します。デバッグの目的で、iv4_consoleのstdoutを出力する必要があります。 Pythonの:Pythonからシェルスクリプトを呼び出す

import sys 
import subprocess 

var="rW015005000000" 
proc = subprocess.Popen(["c.sh", var], shell=True, stdout=subprocess.PIPE) 

output = '' 
for line in iter(proc.stdout.readline, ""): 
     print line 
     output += line 

シェル:私はこの使用

start_dir=$PWD 
release=$1 
echo Release inside shell: $release 
echo Directory: $start_dir 
cd $start_dir 
cd ../../iv_system4/ports/visualC12/Debug 
echo Debug dir: $PWD 
./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua ../../../../../logs/$release/VASP_DUN722_20160307_Krk_Krk_113048_092_1_$release.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160307_Krk_Krk_113048_092_1_$release.xml 
./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua ../../../../../logs/$release/VASP_FL140_20170104_C60_Checkout_afterIC_162557_001_$release.dvl &>../../../../FCW/ObjectDetectionTest/VASP_FL140_20170104_C60_Checkout_afterIC_162557_001_$release.xml 

exit 

をしかし、これは動作しませんでした、それは何も出力しません。どう思いますか?

+0

あなたのPythonコードが実行されません。実際のコードを表示してください。 – ForceBru

+0

申し訳ありません 'rW015005000000'の引用符を忘れました –

+0

' proc'とは何ですか? – ForceBru

答えて

0

をシェルスクリプトを呼び出すために、最善のアプローチは、(IMO)だけだけのpythonを使用することです

import subprocess 
subprocess.call(['./c.sh']) 

を使用することができます。

しかし、あなたの質問の答えには、試してみてください。

import sys 
import subprocess 

var="rW015005000000" 
proc = subprocess.Popen(["/bin/bash", "/full/path/to/c.sh"], stdout=subprocess.PIPE) 
# Best to always avoid shell=True because of security vulnerabilities. 
proc.wait() # To make sure the shell script does not continue running indefinitely in the background 
output, errors = proc.communicate() 

print(output.decode()) 
# Since subprocess.communicate() returns a bytes-string, you can use .decode() to print the actual output as a string. 
-1

あなたは私のコメントを参照してくださいPythonのファイルに

または

import subprocess 
import shlex 

subprocess.call(shlex.split('./c.sh var')) 
+0

'subprocess.call'を使ってstdoutを印刷できませんでした。 'shlex'を使っても動作しませんでした。 –

+0

お試しください import os os.system( 'sh c.sh') –

関連する問題