【发布时间】:2018-03-19 20:10:38
【问题描述】:
我对函数 Popen 有疑问。我尝试从我使用的命令中检索输出。
print(subprocess.Popen("dig -x 156.17.86.3 +short", shell=True, stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip())
这部分工作,但是当我在 Popen 中调用变量时(用于 IP 中的地址)
print(subprocess.Popen("dig -x ",Adres," +short", shell=True, stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip())
发生了这样的事情:
raise TypeError("bufsize must be an integer")
我认为这是命令的问题,所以我使用了这个解决方案:
command=['dig','-x',str(Adres),'+short']
print(subprocess.Popen(command, shell=True, stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip())
但现在返回值与控制台不同:
dig -x 156.17.4.20 +short
vpn.ii.uni.wroc.pl.
如何在脚本中打印上述名称? 非常感谢
【问题讨论】:
-
不同如何?您的前 2 次尝试不起作用,因为您将参数作为
Popen的参数传递。您的第三次尝试是最接近的尝试,但请告诉我们输出(通过打印communicate输出,您将输出和错误流打印为元组和字节。这是您的问题吗? -
我期望的输出是来自命令的输出,第三次尝试脚本打印错误的服务器(就像没有看到 IpAdress)
-
第三个仍然是错误的,因为你传递了一个列表但使用了
shell=True。看我的回答;用 cmets 解释一切太难了。
标签: python subprocess stdout