Browse Source

tools/qvm-run: do not use os.set_blocking

It's available only in python >= 3.5, but we do support tools on python
3.4 (Debian jessie).
Marek Marczykowski-Górecki 6 năm trước cách đây
mục cha
commit
430ff342d4
1 tập tin đã thay đổi với 8 bổ sung4 xóa
  1. 8 4
      qubesadmin/tools/qvm_run.py

+ 8 - 4
qubesadmin/tools/qvm_run.py

@@ -21,12 +21,13 @@
 ''' qvm-run tool'''
 
 import os
-import sys
-
 import subprocess
+import sys
 
 import multiprocessing
 
+import fcntl
+
 import qubesadmin.tools
 import qubesadmin.exc
 
@@ -111,8 +112,11 @@ parser.add_argument('cmd', metavar='COMMAND',
 
 def copy_stdin(stream):
     '''Copy stdin to *stream*'''
-    # multiprocessing.Process have sys.stdin connected to /dev/null
-    os.set_blocking(0, True)
+    # multiprocessing.Process have sys.stdin connected to /dev/null, use fd 0
+    #  directly
+    flags = fcntl.fcntl(0, fcntl.F_GETFL)
+    flags &= ~os.O_NONBLOCK
+    fcntl.fcntl(0, fcntl.F_SETFL, flags)
     for data in iter(lambda: os.read(0, 65536), b''):
         if data is None:
             break