私は、実行時にサーバーに ssh 接続して一連のコマンドを実行する、expect スクリプトを作成しました。擬似コードは次のようになります。
#!/usr/bin/expect
spawn ssh usr@myip
expect "password:"
send "mypassword\n";
send "./mycommand1\r"
send "./mycommand2\r"
interact
bash シェル ($ ./myscript.txt) から実行すると、コードは正常に実行されます。私が今やりたいことは、bash シェルと同じ方法でスクリプト内のコマンドを実行する行を Python ファイルに含めることです。擬似コードは次のようになります。
import subprocess
def runmyscript():
subprocess.call("myscript.txt", executable="expect", shell=True)
def main():
run = runmyscript():
if __name__ == '__main__': main()
myscript.txt スクリプト ファイルを runmyscript.py ファイルと同じディレクトリに配置しましたが、python ファイルを実行すると次のエラーが表示されます。
WindowsError: [Error 2] The system cannot find the file specified
python.org サイトのドキュメントを読みましたが、役に立ちませんでした。.py コード内から bash スクリプトを実行するための狡猾なソリューションを持っている人はいますか?
解決策:このコードは私にとってはうまくいきます。
child = subprocess.Popen(['bash', '-c', './myscript.txt'], stdout = subprocess.PIPE)
このコードを使用して、Expect ファイルを ssh に呼び出し、コマンドを .py ファイルからサーバーに送信しました。マシンに pycrypto/paramiko をビルドする際に問題がある場合に役立ちます。