Python 如何将timeit与包含EOL字符的命令一起使用?
我试图学习如何使用timeit为python驱动的命令行参数计时Python 如何将timeit与包含EOL字符的命令一起使用?,python,windows,cmd,timeit,Python,Windows,Cmd,Timeit,我试图学习如何使用timeit为python驱动的命令行参数计时 from subprocess import * import timeit p = Popen( ["cmd.exe"], stdin=PIPE, stdout=PIPE ) dir_time = timeit.timeit('p.stdin.write("dir\n"),p.stdin.write("exit\n")') print p.stdout.read() 不幸的是,当我运行它时,我得到了 exceptions.S
from subprocess import *
import timeit
p = Popen( ["cmd.exe"], stdin=PIPE, stdout=PIPE )
dir_time = timeit.timeit('p.stdin.write("dir\n"),p.stdin.write("exit\n")')
print p.stdout.read()
不幸的是,当我运行它时,我得到了exceptions.SyntaxError:EOL在扫描字符串文字时(第6行,偏移量26):'p.stdin.write('dir' 我见过一个,它的解决方案是替换单引号,但是我没有将代码片段直接输入cmd,它们的命令中从不包含结束行字符,双引号会产生语法错误
是否有任何方法可以分隔行尾字符,但在cmd中仍然有效?我是否对timeit中的两个参数使用了不正确的语法?要解决EOL的直接问题,可以使用原始字符串文字:
r'p.stdin.write(“dir\n”),…'
(注意:r'
)否则,\n
将被解释为导致您看到的错误的换行符:
>>> import timeit
>>> timeit.timeit('"a" + "\n"')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/timeit.py", line 230, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/usr/lib/python2.7/timeit.py", line 136, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
"a" + "
^
SyntaxError: EOL while scanning string literal
更普遍的问题是:
不起作用timeit(r'p.stdin.write(“dir\n”)、p.stdin.write(“exit\n”))
可能无法访问(p
)namererror
- 即使它已经工作,它也不会测量在
cmd.exe中运行
命令所需的时间 它将测量将命令写入内部dir
文件缓冲区和/或通过管道将其推送到python
cmd.exe
- 否则会引发IOError/OSError
第一次执行
后,管道可能会关闭。exit
多次运行代码(默认为1000000)timeit
cmd.exe
中运行内部命令所需的时间,请直接作为新问题提问
timeit
在这里不是一个合适的工具。这段时间不就是将命令发送到shell需要多长时间,而不是命令运行多长时间吗?我假设它必须等待stdout从第一个命令到达,然后才发送出口,但这只是我的逻辑,而不是技术理解我想EOL是由\n
引起的,所以你应该在p.stdin.write(“dir\n”)
中转义\
,如下所示:p.stdin.write(“dir\\n”)
>>> timeit.timeit(r'"a" + "\n"')
0.021812915802001953