【问题标题】:keep running python script when a thread is waiting for stdout当线程等待标准输出时继续运行python脚本
【发布时间】:2014-03-08 03:02:48
【问题描述】:

我使用 python 脚本在 linux 上接收输入和运行命令。在一个线程中接收到一个命令,它会粉碎一个逻辑卷。但有时需要很长时间才能完成磁盘逻辑卷的粉碎。

subproc.Popen('shred /dev/group/m1')

python 中的线程一次运行一个。因此脚本挂起,在运行子进程时不接受其他输入。有没有办法解决这个问题,以便在线程等待来自标准输出的数据时同时处理其他输入?

【问题讨论】:

    标签: python linux multithreading subprocess multiprocessing


    【解决方案1】:

    抱歉,我在 windows 上使用这个:

    os.system("start /min cmd /c C:\Python27\python.exe sino1.py")
    

    见:

    Python 执行 Unix / Linux 命令示例 http://www.cyberciti.biz/faq/python-execute-unix-linux-command-examples/

    【讨论】:

    • os.system() 是完全没有必要的,它不能回答问题(它不允许在没有阻塞的情况下从子进程读取输出)。
    【解决方案2】:
    • Popen('shred /dev/group/m1') 失败 除非你忘记显示 shell=True 参数
    • Popen() 不会阻塞,无论子进程需要多长时间
    • 您可以在多个 Python 线程中并行等待输入。 Python 可以在 IO 上发布 GIL。

    也就是说,如果您正确使用subprocess 模块,那么您的脚本应该不会挂起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2014-05-20
      • 2018-05-28
      相关资源
      最近更新 更多