这里是我的代码:Python的子须藤返回错误:错误:“须藤:对不起,你必须有一个tty运行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']
我已经试过许多东西,但我不断收到这个错误“须藤:对不起,你必须有一个tty运行sudo的”。它工作正常,如果我只是通过终端手动执行,但我需要自动执行此操作。我读过一个解决方法可能是在我的ssh调用中使用'-t'或'-tt',但是我还没有能够在子进程中成功实现这个功能(终端只是挂在我身上)。任何人都知道我可以如何修复我的代码,或者解决这个问题?理想情况下,我想ssh,然后切换到sudo用户,然后从那里运行一个文件(我只是把ls用于测试目的)。
为什么'须藤苏 - EC2用户; ls'而不只是'sudo -u ec2-user ls'? – miken32