Python subprocess.call在PyCharm(linux)中不工作
节目如下:Python subprocess.call在PyCharm(linux)中不工作,python,linux,python-3.x,subprocess,pycharm,Python,Linux,Python 3.x,Subprocess,Pycharm,节目如下: 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运行它时,终端将保持空白。 我还尝试
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,但这并没有改变任何事情
我做错了什么?PyCharm和IDE通常不喜欢
getpass
-like输入。由于sudo
以这种方式请求密码,因此无法从重定向的IDE控制台运行
从Popen
重定向stdin
也不会改变任何东西
解决方法:从终端运行sudo
命令。使用xterm
的示例(对不起,我对现在的终端了解不多):
pycharm终端不支持sudo getpass方法。您可能想要
pexpect
:谢谢您的输入。我想给sudo提供密码,但是我该如何获得密码呢getpass.getpass
在PyCharm中似乎也不起作用。不,getpass
也需要原始终端。您可以尝试检测它,如果它不是一个正常的终端(测试hasattr(sys.stdin,“isatty”)),如果它不是一个正常的终端,则使用一些GUI,如wx或tk来提示输入密码(隐藏字母)hasattr(sys.stdin,“isatty”)
总是True
。在普通终端和PyCharms中。替代品?哦。Pyscripter是假的。可以也许hasattr(sys.stdin,“fileno”)起作用了!不漂亮,但我很高兴有解决办法。非常聪明!很高兴它起作用了!我想知道为什么我没早点想到。。。在这里运行windows。其他问题:)也有一些windows问题,但我知道如何解决这些问题,哈哈,linux黑客对我来说是新的。一个独立的python程序安装在依赖项上对我来说无疑是一个挑战。
call(["xterm","-e","sudo", sys.executable, os.path.realpath(__file__), "--root-install"])