Python:执行windows

2024-05-16 00:22:32 发布

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

我是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命令没有正确执行。在

这就是我所期待的。在

^{pr2}$

请告诉我怎么修理这个。谢谢。在


Tags: topyimport命令hostonlytimeos
5条回答

您没有将python shell参数传递给tracert,因此Windows tracert建议您提供一个参数(例如“127.0.0.1”)

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

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

这里有个简单的改变:

import os
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
os.system('tracert' + ' ' + sys.argv[1])

注意,我必须在tracert调用和参数之间添加一个空格。 我专门调用它是为了让您看到它,但您也可以只调用'tracert ',并在末尾加上空格。在

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

^{pr2}$

一个(稍微)更好的方法是使用subprocess

import subprocess
import time
import sys
print (time.strftime("\nDate: %d %B %Y"))
subprocess.run(["tracert",sys.argv[1]])

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

在注:无对这些代码进行任何错误检查。如果不带参数运行tr.py,则会出现错误:

[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

相关问题 更多 >