ここでは私のコードです:Pythonのサブプロセスにsudoが返すエラー:ERROR:[ 'sudoを:申し訳ありませんが、あなたはsudoのを n実行するための端末を持っている必要があります']
import subprocess
HOST = 'host_name'
PORT = '111'
USER = 'user_name'
CMD = 'sudo su - ec2-user; ls'
process = subprocess.Popen(['ssh','{}@{}'.format(USER, HOST),
'-p', PORT, CMD],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = process.stdout.readlines()
if not result:
print "Im an error"
err = process.stderr.readlines()
print('ERROR: {}'.format(err))
else:
print "I'm a success"
print(result)
私はこれを実行すると、私は次のような出力を受け取ります私のターミナルで:
dredbounds-computer: documents$ python terminal_test.py
Im an error
ERROR: ['sudo: sorry, you must have a tty to run sudo\n']
私は複数のものを試してみたが、私はそのエラー得続ける「sudoを:申し訳ありませんが、あなたはsudoを実行するための端末を持っている必要があります」。手動で端末を操作するとうまく動作しますが、これを自動化する必要があります。私の回避策は、ssh呼び出しで '-t'または '-tt'を使用することであるかもしれませんが、サブプロセスでこれを正常に実装することはできませんでした(端末はただ私のためにハングアップしています)。コードを修正する方法や、この問題を回避する方法については、誰でも知っていますか?理想的にはsshを使い、sudoユーザーに切り替えてそこからファイルを実行したい(私はテスト目的のためにlsを入れるだけです)。
なぜ 'sudoのSU - EC2ユーザー。 'sudo -u ec2-user ls'の代わりに' ls'を使用していますか? – miken32