python压缩子进程的输出

时间:2018-04-24 06:08:06

标签: python redirect subprocess output

  • 有一个黑客挑战。
  • 我有一个名为“lock”的密码保护文件
  • 用密码打开文件会返回QR码。
  • 需要将QR分配给var。
  • 不想每次都显示QR

工作但有输出:

var = os.system("./lock %s" % password)

SO说我应该使用:

var = subprocess.Popen("something.py")

尝试传递如上所述,但失败导致“Popen”想要一个列表或一个字符串。 如果我在使用popen之前将命令作为字符串连接,它仍会显示。

已阅读的内容(至少)

Suppress output of subprocess Passing Variables to Subprocess.Popen How to just call a command and not get its output

完整代码:

import sys
import os
import subprocess

def file_len(fname):
with open(fname) as f:
    for i, l in enumerate(f):
        pass
    return i + 1

   lock = "/root/share/lock"
   print "Hello"
   passfile = raw_input("Enter the password file name: ")
   assert os.path.exists(passfile), "I did not find the file at, "+str(passfile)
   devnull = open(os.devnull, 'wb')
   trys = file_len(passfile)
   passfile = open(passfile,'r+')
   cnt = 1
   wrong = os.system("./lock penis")

   for password in passfile:
   #       com = ("./lock %s" % password)
   #       var = os.system("./lock %s" %  password)
   var = subprocess.Popen("./lock  %s" % password, stderr=devnull, stdout=devnull)

   if var == wrong:
            os.system('clear')
            cnt += 1
            print ("Try  %s/%s " %(cnt, trys))
            print ("Currently PIN: %s" % password)
    else:
            print "!!!!!!!!!!!!!!!!!"
            print password

重定向到devnull也不起作用。     OSError:[Errno 2]没有这样的文件或目录:''

1 个答案:

答案 0 :(得分:0)

我建议你尝试直接使用os.devnull作为目标而不是打开文件。我相信你得到的错误是

devnull= open(os.devnul, 'wb')

共鸣将是因为/ dev / null是一个占位符,用于发送任何内容(虚空)而不是您可以打开的实际文件。