Python:执行windows tracert

时间:2018-03-09 06:50:12

标签: python windows

我是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>

请让我知道如何解决这个问题。感谢。

1 个答案:

答案 0 :(得分:1)

您尚未将python shell参数传递给blt $t1, $t3, loop,因此Windows tracert建议您提供参数(例如&#34; 127.0.0.1&#34;)

最简单的方法是更改​​代码以执行另外两项操作

  1. 获取您提供给python脚本的shell参数。 Python在tracert模块中有一个数组:sys,其中包含脚本参数。
  2. 将其传递给sys.argv。您可以将字符串连接与tracert运算符一起使用。
  3. 这是一个简单的改变:

    +

    注意,我必须在对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