子流程变量

2024-03-28 16:46:34 发布

您现在位置:Python中文网/ 问答频道 /正文

  1 import subprocess
  2 raw = raw_input("Filename:").lower()
  3 ip = raw_input("Host:").lower()
  4 cmd = subprocess.call("tcpdump -c5 -vvv -w" + " raw " + " ip ",shell=True)

这是我的剧本。除了一个关键的目标外,一切都在工作,使用原始输入。 它允许我输入任何我想要的东西,但是当它去保存文件或使用ip/主机doe时,实际上什么也做不了。 当然它给了我数据包,但是来自本地主机而不是我输入的主机。

我怎么知道这不起作用是因为我的第一个原始输入是文件名,所以我放在测试中,当我在文件夹中查找我的脚本时,它会生成一个名为“raw”的文件,意思是,它实际上并不是只使用“X”中的内容来获取我的输入。。。

所以我有几个机会说:

  1 import subprocess
  2 raw = raw_input("Filename:").lower()
  3 ip = raw_input("Host:").lower()
  4 cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw + "host" + ip,shell=True)

这很好,因为它实际上需要-w,但现在它将它保存为rawhostip而不是“raw”的输入。 作为参考,这是命令在终端中的外观:

tcpdump -c5 -vvv -w savename host wiki2

仅有的两个变量是savename和wiki2,其余变量是命令工作所必需的。

有了这个脚本,我会得到这个错误:

import subprocess
raw = raw_input("Filename:").lower()
ip = raw_input("Host:").lower()
cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw, "host" + ip,shell=True)

错误:

Traceback (most recent call last):
  File "te.py", line 4, in <module>
    cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw, "host" + ip,shell=True)
  File "/usr/lib/python2.6/subprocess.py", line 480, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.6/subprocess.py", line 583, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer

我迷路了。任何帮助都会很好,是的,我知道,看看子流程的文档:X,我需要一个人教我,我不明白我在读什么。

我的问题是如何处理这些变量。


Tags: importipcmdtruehostinputrawshell
2条回答

不要使用shell=True。应该是False

你在输入中犯了一些细微的错误。特别是,如果有两个字符串:

>>> s1 = 'Hello'
>>> s2 = 'Hi'
>>> s1 + s2
'HelloHi'

注意,在HelloHi之间没有空格。所以不要这样做。(你的4号线)

你应该做(好的方法):

>>> raw = raw_input('Filename: ')
Filename: test
>>> ip = raw_input('Host: ')
Host: 192.168.1.1 
>>> command = 'tcpdump -c5 -vvv -w {0} {1}'.format(raw, ip)   # the command goes here
>>> subprocess.call(command.split(), shell=False)   # call subprocess and pass the command as a list using split

现在应该可以了。

不应使用字符串形式作为subprocess函数。尝试:

subprocess.check_call(["tcpdump", "-c5", "-vvv", "-w", raw, "host", ip])

相关问题 更多 >