我正在使用Python编写的终端多路复用器。在基于Ubuntu的发行版上,我看到错误:
bash: cannot set terminal process group (9862): Inappropriate ioctl for device
bash: no job control in this shell
tmp@tmp-VirtualBox:
字符串
在openSuSE和Fedora上,我没有看到ioctl错误,作业控制工作正常。
示例问题:
#!/usr/bin/python3
import subprocess
import sys
import pty
import os
master, slave = pty.openpty()
bashCMD = "bash".split()
p = subprocess.Popen(bashCMD, preexec_fn=os.setsid, stdin=slave, stdout=slave, stderr=slave, universal_newlines=True, shell=True)
while p.poll() is None:
data = os.read(master, 1026)
print(str(data))
2条答案
按热度按时间z5btuh9x1#
fork()可以在所有平台上工作。
但它并不像pty.openpty()slave那样给予我们写入TTY的权限
为了解决这个问题,我使用了mmap
字符串
hmmo2u0o2#
在你最初的例子中,修改这一行:
字符串
致:
型
然后,不再有关于“设备的ioctl不适当”的警告。