2015-12-01 276 views
0

我必須用python打開一個使用sudo的終端。考慮我的密碼是pass,我需要在sudo critical-stack-intel pull的腳本中運行一個命令。用sudo python打開終端

我有以下小塊代碼:

import subprocess 
import shlex 

command = "sudo critical-stack-intel pull" 
popen = subprocess.Popen(shlex.split(command),stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
popen.communicate("pass") 
popen.wait() 
# print help(p) 

如果我運行該文件python myfile.py,它要求我爲終端內的密碼。這不是我想要的。我想讓python處理我給的密碼並正常運行。我如何完成這項工作?

編輯

使用popen.communicate(pass + "\n")sudo -S一起做了什麼,我想要的。

+0

'sudo'打開tty,默認情況下它不使用stdin。用'sudo -S'代替 –

+0

看看這個:http://stackoverflow.com/questions/567542/running-a-command-as-a-super-user-from-a-python-script – nablahero

+0

我想要使用'subprocess.Popen'而不是'os.Popen'。 – Pant

回答

2

您可以使用-S選項sudo通過stdin傳遞密碼。然而,最有可能的是,允許sudo使用/etc/sudoers訪問critical-stack-intel而無需密碼。

+1

在'/ etc/sudoers'中解決這個問題似乎是正確的方法。查看[命令別名](https://help.ubuntu.com/community/Sudoers#Command_Aliases) – Joost

+0

我在命令中使用了'-S'和'popen.communicate(pass)',但沒有結束會話。 – Pant

+0

@SarvagyaPant:IIRC'溝通()'不關閉標準輸入。你需要發送一個換行符和你的密碼 –