2017-05-08 80 views
3

這裏的程序:subprocess.call不PyCharm工作(Linux版)

if os.name == 'posix' and getpass.getuser() != 'root': 
    from subprocess import call 

    call(["sudo", sys.executable, os.path.realpath(__file__), "--root-install"]) 

當我從終端運行它,它工作正常:

> [sudo] Password for user: 

但是,當我從PyCharm的運行終端保持空白。
我也嘗試手動設置stdin=sys.stdin, stdout=sys.stdout,但那並沒有改變任何東西。

我在做什麼錯在這裏?

+0

pycharm終端不支持sudo getpass方法。你可能想'pexpect':http://stackoverflow.com/questions/18046508/python-pexpect-pxssh-with-sudo-and-eof –

+0

感謝您的輸入。我想過提供密碼給'sudo',但是我怎麼會說密碼? 'getpass.getpass'在PyCharm中似乎也不起作用。 –

+0

nope,'getpass'也需要原始終端。您可以嘗試檢測它,如果不是普通終端(測試'hasattr(sys.stdin,「isatty」)'),並且它不是普通終端,則使用像wx或tk這樣的GUI來提示輸入密碼隱藏字母) –

回答

1

PyCharm和IDE通常不喜歡類似getpass的輸入。由於sudo以這種方式請求密碼,因此無法從重定向的IDE控制檯運行。

重定向stdinPopen也不會改變任何東西。

解決方法:從終端運行sudo命令。 xterm舉例(對不起,我對時下終端了解不多):

call(["xterm","-e","sudo", sys.executable, os.path.realpath(__file__), "--root-install"]) 
+0

作品!不漂亮,但我很高興有一些解決方案。非常聰明! –

+0

很高興它的作品!我想知道爲什麼我沒那麼早想到...在這裏跑窗戶。其他問題:) –

+0

也有一些Windows問題,但我知道如何解決_those_哈哈,Linux黑客是我的新。一個獨立的python程序肯定會對它有依賴性,這對我來說是個挑戰。 –