我试图从循环内部调用netcat/nc,将lcv作为命令中的最后一个八位字节传递。由于变量在命令的中间,我似乎遇到了一个问题。我想做的是:
for i in 1 to 50
print i
nc -nvv 192.168.1.i 21 -w 15 >> local_net.txt
到目前为止,我试过:
os.system("nc -nvv 192.168.1.",i,"21 -w 15 >> local_net.txt")
以及
subprocess.call(["nv","-nvv 192.168.1.",i,"21 -w 15 >> local_net.txt")
有没有一种更简单的方法可以从执行系统命令的命令中引用LVC?
这不起作用的原因是:
…是
os.system
接受单个字符串作为shell命令。你给了它三个独立的论点。(另外,即使这能如您所希望的那样工作,它也必须在i
之前放置一个空格,或者不在i
之后放置一个空格。)您可以通过组合字符串的任何常用方法来修复它:然而,你尝试
subprocess.call
的直觉是好的。这不起作用的原因是:…是两倍的。
首先,你要加入多个论点。这相当于shell命令:
当你想要的与这些相等时:
你需要正确地分解论点才能得到答案。
其次,
>> local_net.txt
根本不是命令本身的一部分;它是一个shell重定向指令。没有贝壳你做不到。如果您真的想使用shell,可以使用与使用
system
相同的方法,但只需将一个:但更好的方法是正确地分解参数,并执行重定向Python样式而不是shell样式:
在文件模式下,
a
意味着追加到文件的末尾;+
意味着更新文件(如果它存在的话),否则就创建它;b
意味着以二进制模式打开它(因此,如果这是Windows-I,这里假设是Python 2.x,就不翻译换行)。同时,Python版本的
for i in 1 to 50
是for i in range(1, 51):
。(注意51
在末尾,因为Python范围是半开的。)因此,将其放在一起:值得注意的是,您可以在大多数类似sh的shell(包括bash)中这样做,而根本不需要Python。对于这样简单的事情来说,可能更容易:
相关问题 更多 >
编程相关推荐