![](/img/trans.png)
[英]How to remove \n\r or [] in stdout.readlines() in paramiko python
[英]Python subprocess stdout.readlines() getting stuck
我試圖使用python子處理模塊,以便ssh到服務器,然后切換到超級用戶,然后ls並在終端中打印文件夾。
我的代碼:
def sudo_Test():
HOST = 'Host'
PORT = '227'
USER = 'user'
cmd='sudo su - ec2-user;ls'
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("my_password\r\n")
print "stuck here VVV"
result = process.stdout.readlines()
print "finished it"
if not result:
print "Im an error"
err = process.stderr.readlines()
print('ERROR: {}'.format(err))
else:
print "I'm a success"
print result
print sudo_Test()
運行此命令時的控制台輸出:
dredbounds-computer:folder dredbound$ python terminal_test.py
stuck here VVV
由於某種原因,代碼被卡在行result = process.stdout.readlines()上。 發生這種情況時,我必須cntrl + c退出終端會話。 如果我只是執行cmd ='sudo,它會很好地工作; ls'而不是cmd ='sudo su-ec2-user; ls'。有人知道我做錯了什么或如何使它工作?
更新:我在上面的代碼中更改了cmd ='sudo su-ec2-user; ls'-> cmd ='sudo su-ec2-user ls'。 現在我收到以下錯誤:
['password\r\n', '\r\n', '/bin/ls: /bin/ls: cannot execute binary file\r\n']
我不知道為什么它現在認為ls是一個二進制文件,但是無論如何我可以告訴我那只是一個終端命令,所以它返回目錄列表嗎?
問題在這里:
sudo su - ec2-user;ls
sudo su - ec2-user
打開一個shell並等待輸入。 您需要在外殼程序退出並運行ls
命令之前向外殼程序發送退出命令(或關閉其標准輸入)。
如果您的目標是以ec2-user
身份運行ls
,請嘗試:
sudo -u ec2-user ls
換句話說,替換
cmd='sudo su - ec2-user;ls'
帶有:
cmd='sudo -u ec2-user ls'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.