##1.実現したいこと
以下のpythonコードでAシェルを動かしながらBシェルの出力をpythonで受け取ろうとしています。
Python
1 2Loc="string" 3Linuxcmd = ["$0 $1","sh ./F.sh",Loc] 4print("Please wait.....") 5subprocess.run(Linuxcmd,shell=True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
##2.実行スクリプト
F.shは以下。
Shell
1#!/bin/bash 2 3HOSTS="host1 4host2" 5 6sh ./B.sh & 7 8for i in ${HOSTS};do 9 10ssh -o StrictHostKeyChecking=no $i "df -h --portability | grep -E '\ /$'" 1>> ${dir}/Result/result.csv 2>${dir}/error/${i}_error.csv 11 12done 13
B.shは以下
Shell
1#!/bin/bash 2 3 4File=`pwd`"/Result/restlt.csv" 5echo ${cmd} 6 7Total=7 8 9while : 10do 11 Cnt=`wc -l ${File} | awk '{print $1}'` >/dev/null 2>&1 12 Pro=`ps -ef | grep "GetLogs.sh " | \grep -v grep | wc -l` >/dev/null 2>&1 13 14if [ ${Pro} = 1 ] ; then 15Per=`echo "scale=3;${Cnt}/${Total}*100" | bc` 16date;echo ${Per}"% completed...." 17 18else 19break 20fi 21 22sleep 5 23 24done 25 26
F.shをPythonを介さずに実行すると
date;echo ${Per}"% completed...."
が問題なく画面出力するのですが、
Pythonから実行すると上記の出力がされることなく終了してしまいます。
Popen
の.communicate()
でもトライしてみましたが
戻り値が空っぽ(NONE)でした。
バックグラウンド実行の出力は標準出力ではないのでしょうか?
どうしたら表示されますでしょうか。
アドバイスいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー