我是Python新手并试图编写我的第一个程序。
我尝试做的是通过在输出上添加日期来修改Windows tracert
命令输出。
c:\Python\Codes>more tr.py
import os
import time
print (time.strftime("\nDate: %d %B %Y"))
os.system('tracert')
c:\Python\Codes>tr.py 127.0.0.1
Date: 09 March 2018
Usage: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
[-R] [-S srcaddr] [-4] [-6] target_name
Options:
-d Do not resolve addresses to hostnames.
-h maximum_hops Maximum number of hops to search for target.
-j host-list Loose source route along host-list (IPv4-only).
-w timeout Wait timeout milliseconds for each reply.
-R Trace round-trip path (IPv6-only).
-S srcaddr Source address to use (IPv6-only).
-4 Force using IPv4.
-6 Force using IPv6.
c:\Python\Codes>
但是,Python代码中的tracert
命令未正确执行。
这就是我所期待的。
c:\Python\Codes>tr.py 127.0.0.1
Date: 09 March 2018
Tracing route to 127.0.0.1
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms 127.0.0.1
Trace complete.
c:\Python\Codes>
请让我知道如何解决这个问题。感谢。
答案 0 :(得分:1)
您尚未将python shell参数传递给blt $t1, $t3, loop
,因此Windows tracert
建议您提供参数(例如&#34; 127.0.0.1&#34;)
最简单的方法是更改代码以执行另外两项操作
tracert
模块中有一个数组:sys
,其中包含脚本参数。sys.argv
。您可以将字符串连接与tracert
运算符一起使用。这是一个简单的改变:
+
注意,我必须在对tracert的调用和参数之间添加一个空格。
我特意打电话给你,让你看到它,但你也可以用最后的空格来呼叫import os
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
os.system('tracert' + ' ' + sys.argv[1])
。
就是这样,在我的Mac上运行(代之以'tracert '
,但想法是一样的):
traceroute
(稍微)更好的方法是使用[mjl@milo:~/hax]
[18:42](hax)$ python tr.py 127.0.0.1
Date: 09 March 2018
traceroute to 127.0.0.1 (127.0.0.1), 64 hops max, 52 byte packets
1 localhost (127.0.0.1) 0.312 ms 0.077 ms 0.043 ms
[mjl@milo:~/hax]
[18:42](hax)$
:
subprocess
现在你不必在命令后添加空格。但是您必须将命令及其所有参数作为数组中的元素提供给import subprocess
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
subprocess.run(["tracert",sys.argv[1]])
。
注意: - 这些代码都不会进行任何错误检查。如果您在没有参数的情况下运行subprocess.run()
,则会出错:
tr.py