Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python调用copy时,系统找不到指定的文件_Python_Windows - Fatal编程技术网

从python调用copy时,系统找不到指定的文件

从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

这是我的副本.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 "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)