gpt4 book ai didi

python - Python子进程sudo返回错误:ERROR:['sudo: sorry, you must have a tty to run sudo\n']

转载 作者:行者123 更新时间:2023-12-02 14:20:16 29 4
gpt4 key购买 nike

这是我的代码:

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:对不起,您必须有一个tty才能运行sudo”。如果我只是通过终端手动进行操作,则效果很好,但是我需要使它自动化。我读到一种解决方法可能是在ssh调用中使用'-t'或'-tt',但是我还不能在子进程中成功实现这一点(终端只是为我挂起了)。有谁知道我该如何解决我的代码或解决此问题?理想情况下,我想使用ssh,然后切换到sudo用户,然后从那里运行文件(我只是将ls用于测试目的)。

最佳答案

sudo提示您输入密码,但是它需要终端来执行此操作。传递-t-tt为运行远程命令提供了一个终端,但是现在它正在等待您输入密码。

process = subprocess.Popen(['ssh','-tt', '{}@{}'.format(USER, HOST),
'-p', PORT, CMD],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
process.stdin.write("password\r\n")

但是请记住,直到 ls启动的shell退出后, su才会运行。您应该直接以 ec2-user的身份登录到计算机(如果可能),或者仅使用 sudo来运行所需的任何命令,而无需先经过 su

关于python - Python子进程sudo返回错误:ERROR:['sudo: sorry, you must have a tty to run sudo\n'],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38641224/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com