python - 使用 subprocess.run 从 Python 中的线程执行 shell 命令后丢失 ioctl
问题描述
我正在尝试使用 subprocess.run 执行一些 shell 脚本或命令。执行是由一个线程完成的。因此,每个线程将使用 subprocess.run 生成执行一个命令或脚本,然后完成。
所有的执行都正常进行。但是,我注意到程序完成后的大部分时间,我的 Linux 终端都会丢失它的 ioctl。
我检查了stackoverflow的答案,发现这种行为发生是因为某些程序(例如vim)不需要io,因此它会通知内核在启动时不要使用它,并在退出时返回ioctl。有时,退出不是那么顺利,因此程序无法返回 ioctl。
好的,我得到了答案,但是几乎每次运行后,我的 python 脚本都会发生这种丢失 ioctl 的行为。然后我必须发出重置命令来取回 ioctl。
我正在使用 python 版本 3.8.10
我的代码如下:
def _execute_suprocess(self,cmd, on_error_cb = None):
completed_process = subprocess.run(cmd, shell=True,
stdout = subprocess.PIPE, stderr= subprocess.PIPE)
if completed_process.returncode != 0 and on_error_cb is not None:
on_error_cb(cmd, completed_process)
def foo(self):
#there's a loop that read some commands to be executed then execute each of them in a thread
running_cmd = Thread(target=self._execute_suprocess, args=(cmd, self._on_cmd_execution_error))
running_cmd.start()
我尝试过使用子进程,例如添加/删除标准输出、标准错误、启用捕获输出,但它没有帮助。
您对此的根本原因有任何想法吗?
解决方案
推荐阅读
- c# - 无法将证书粘贴到受信任的根证书颁发机构存储中。访问被拒绝
- java - 为什么不能通过两个参数交换数组的两个元素?
- netcdf - NetCDF 重新排序维度
- reactjs - 从 React 中的表单发布方法获取响应
- php - 选择数据时子查询返回多于 1 行
- cmd - cd %C^ 在命令提示符中?
- javascript - 如何使用 Nodejs 和 APIGatewayProxyEvent 发送带有请求的文件
- python-3.x - 使用opencv遮蔽颜色
- html - 如何从表列中的输入中获取值并将它们总结起来?
- sql-server - 在 SQL Server 代理启动后 X 分钟安排 SQL 作业