从python调用copy时,系统找不到指定的文件
这是我的副本.py:从python调用copy时,系统找不到指定的文件,python,windows,Python,Windows,这是我的副本.py: from subprocess import call call("copy p2.txt p3.txt") 如果在命令提示符下,我使用 复制p2.txt p3.txt它可以很好地复制 但是当我使用python copy.py时,它给了我: Traceback (most recent call last): File "copy.py", line 2, in <module> call("copy p2.txt p3.txt") File
from subprocess import call
call("copy p2.txt p3.txt")
如果在命令提示符下,我使用
复制p2.txt p3.txt
它可以很好地复制
但是当我使用python copy.py
时,它给了我:
Traceback (most recent call last):
File "copy.py", line 2, in <module>
call("copy p2.txt p3.txt")
File "C:\Python27\lib\subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 896, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
回溯(最近一次呼叫最后一次):
文件“copy.py”,第2行,在
调用(“复制p2.txt p3.txt”)
调用中第493行的文件“C:\Python27\lib\subprocess.py”
返回Popen(*popenargs,**kwargs)。等待()
文件“C:\Python27\lib\subprocess.py”,第679行,在\uuu init中__
错误读取,错误写入)
文件“C:\Python27\lib\subprocess.py”,第896行,在执行子进程中
startupinfo)
WindowsError:[错误2]系统找不到指定的文件
如果我用xcopy替换python对copy的调用,它就可以正常工作
为什么会这样?当subprocess.call()
像在shell中一样使用命令时,您还需要指定
在这种情况下,需要使用shell=True
的原因是Windows中的copy
命令实际上不是可执行文件,而是shell的内置命令(如果内存正常)<另一方面,code>xcopy是一个真正的可执行文件(在%WINDIR%\System32
中,通常在%PATH%
中),因此可以在cmd.exe
外壳之外调用它
在这种特殊情况下,可能是可行的替代方案
请注意,使用shell=True
可能会导致安全隐患,或者如文档所述:
警告:使用shell=True
可能会造成安全隐患。有关详细信息,请参阅下面的警告
更新了我的答案,解释了为什么在没有
shell=True的情况下copy
会失败。
from subprocess import call
call("copy p2.txt p3.txt", shell=True)