[我在尝试使用python在linux中复制文件时遇到了问题(当我切换到Windows 10时,我也会遇到类似的不一致之处)

问题描述 投票:-1回答:1

Python = 3.6.8 System = Ubuntu问题:我想使用子流程进行复制,但无法正常工作。我首先使用Shutil模块,它可以正常工作,然后与子流程模块一起工作,则没有。有人可以向我解释我在做什么错吗?谢谢

>>> s
'/home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll'
>>> os.getcwd()
'/home/godzilla/Desktop/SoX/Install files for Windows'
>>> dest=os.getcwd()
>>> shutil.copy(s,dest)
'/home/godzilla/Desktop/SoX/Install files for Windows/libmad.dll'
>>> subprocess.call('cp {} {}'.format(s,dest))
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    subprocess.call('cp {} {}'.format(s,dest))
  File "/usr/lib/python3.6/subprocess.py", line 287, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'cp /home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll /home/godzilla/Desktop/SoX/Install files for Windows': 'cp /home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll /home/godzilla/Desktop/SoX/Install files for Windows'''

然后,如果我这样做

>>> subprocess.call('cp {} {}'.format(s,dest),shell=True)
1

我从上面得到一个1作为返回值,并且没有文件被复制。到目前为止,我只能使用shudir复制。为什么会发生这种情况?...我是否必须随机尝试10个命令才能复制一个文件? ....我一定在做明显的错误。

python subprocess
1个回答
0
投票

将您的参数作为列表分割并像run()一样传递给subprocess.run(['cp',src,dst])

您可以在子过程模块的documentation上阅读更多内容

args应该是程序参数的序列,或者是单个字符串或类似路径的对象。默认情况下,如果args是序列,则要执行的程序是args中的第一项。如果args是字符串,则解释取决于平台,并在下面进行描述。有关默认行为的其他区别,请参见shell和可执行参数。除非另有说明,否则[[建议按顺序传递args


0
投票
您的错误指出了问题:

FileNotFoundError: [Errno 2] No such file or directory: 'cp /home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll /home/godzilla/Desktop/SoX/Install files for Windows': 'cp /home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll /home/godzilla/Desktop/SoX/Install files for Windows'''

我对{} {}语法不熟悉,但是看起来它正在引入变量s:

'/home/godzilla/Desktop/SoX/Install files for Windows/SoxFiles/libmad.dll'

并且空格和字符串文字的某些组合存在一些问题。这导致您要作为shell命令执行的内容被解释为仅一个巨型字符串。签出this以解决类似问题。 
© www.soinside.com 2019 - 2024. All rights reserved.