首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:执行windows tracert

问Python:执行windows tracert
EN

Stack Overflow用户
提问于 2018-03-09 06:50:11
回答 1查看 1.2K关注 0票数 1

我是Python新手,并试图编写我的第一个程序。

我要做的是通过在输出中添加日期来修改windows tracert命令输出。

代码语言:javascript
复制
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命令没有正确执行。

这正是我所期待的。

代码语言:javascript
复制
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>

请告诉我怎么解决这个问题。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 07:47:50

您还没有将python参数传递给tracert,所以tracert建议您提供一个参数(例如"127.0.0.1")

最简单的方法是修改代码,再做两件事。

  1. 获取提供给python脚本的shell参数。Python在sys模块:sys.argv中有一个数组,它包含脚本参数。
  2. 把它传递给tracert。您可以在+运算符中使用字符串连锁。

以下是一个简单的改变:

代码语言:javascript
复制
import os
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
os.system('tracert' + ' ' + sys.argv[1])

注意,我必须在对tracert的调用和参数之间添加一个空格。我特意叫了它,让你看到它,但你也可以用最后的空格调用'tracert '。

在这里,运行在我的Mac上(它有traceroute,但想法是一样的):

代码语言:javascript
复制
[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

代码语言:javascript
复制
import subprocess
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
subprocess.run(["tracert",sys.argv[1]])

现在,您不必在命令之后添加一个空格。但是,必须将命令及其所有参数作为数组中的元素提供给subprocess.run()。

注意:-这些代码中没有一个进行任何错误检查。如果您在没有参数的情况下运行tr.py,它将给出一个错误:

代码语言:javascript
复制
[mjl@milo:~/hax]
[18:42](hax)$ python tr.py

Date: 09 March 2018
Traceback (most recent call last):
  File "tr.py", line 5, in <module>
    os.system('traceroute' + ' ' + sys.argv[1])
IndexError: list index out of range
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49188087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档