我有一个 python 脚本需要调用定义的$EDITOR
or $VISUAL
。当单独调用 Python 脚本时,我可以启动$EDITOR
没有任何问题,但是当我将某些内容传输到 Python 脚本时,$EDITOR
无法启动。现在,我正在使用 nano,它显示
收到 SIGHUP 或 SIGTERM
每次。看来是同一个问题此处描述.
sinister:Programming [1313]$ echo "import os;os.system('nano')" > "sample.py"
sinister:Programming [1314]$ python sample.py
# nano is successfully launched here.
sinister:Programming [1315]$ echo "It dies here." | python sample.py
Received SIGHUP or SIGTERM
Buffer written to nano.save.1
编辑:澄清;在程序内部,我没有通过管道发送给编辑器。代码如下:
editorprocess = subprocess.Popen([editor or "vi", temppath])
editorreturncode = os.waitpid(editorprocess.pid, 0)[1]
当您通过管道将某些内容传输到进程时,管道将连接到该进程的标准输入。这意味着您的终端输入不会连接到编辑器。大多数编辑器还会检查他们的标准输入是否是终端(isatty),而管道则不然;如果它不是终端,他们将拒绝启动。如果是nano
,这似乎会导致它退出并显示您包含的消息:
% echo | nano
Received SIGHUP or SIGTERM
如果您希望能够将其标准输入传递到基于终端的编辑器,则需要以其他方式(例如通过文件)向 Python 脚本提供输入。
现在你已经澄清了你的问题,你不希望 Python 进程的stdin
附加到编辑器后,您可以按如下方式修改代码:
editorprocess = subprocess.Popen([editor or "vi", temppath],
stdin=open('/dev/tty', 'r'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)