2016-11-10 27 views
2

他のプログラムでbashスクリプトで開始されたプロセスのPIDを見つける必要があります。私はsshpassを使ってパスワードを入力し、sshpassはsshクライアントを起動し、そのクライアントはsshtunnelをサーバにオープンします。 ここにある例:サブプロセスpython + bashでプロセスのpidを取得

start_tunnel.sh 
#!/bin/bash 
exec sshpass -p 'passw' ssh -D :port [email protected]$server -o StrictHostKeyChecking=no -f -N 
exit 

そして私はsubrocess.Popenでそれを起動します。

proc = subprocess.Popen('start_tunnel.sh') 

スクリプトがうまく起動し、それが正常に終了し、0を返し、私はそれをPIDを取得することができますが、それはすることが可能です開始されたsshclientのPIDを取得しますか?

答えて

0

Popenから直接sshpassに電話し、shell=Falseオプションを渡してください。その後、直接の子はsshpassサブプロセスになります。シェルラッパーは必要ありません。

+0

私がこれを行うと、私はsshpass PIDを取得しますが、sshpass proccessによって生成されたsshclient proccessのPIDを取得することは可能ですか? –

1

デフォルトでは、proc.pidはシェルのPID(親プロセス)を返します。あなたが探しているのは、子プロセスのPID(sshpass)です。

shell=Falsesubprocess.Popenに設定しました。 Documentation is here

0

subprocess.Popenを使用すると、私は単にshell=falseオプションを呼び出します。

関連する問題