子进程 cp 返回错误 - bufsize 必须是整数 [重复]

Posted

技术标签:

【中文标题】子进程 cp 返回错误 - bufsize 必须是整数 [重复]【英文标题】:Subprocess cp returns error - bufsize must be integer [duplicate] 【发布时间】:2016-03-13 09:23:12 【问题描述】:

我正在尝试从一个目录复制到另一个目录,并同时通过调用 'cp' 来重命名它们:

directories = ['/Users/Me/Folder1/File1.txt', '/Users/Me/Folder/File2.txt']
output = ['/Users/Me/Folder2/Hello.txt', 'Users/Me/Folder2/World.txt'] 
for in, out, in zip(directories, output):
    subprocess.call('cp', in, out)

但它会返回:

 File "./test.py", line 33, in <module>
    subprocess.call('cp', in, out)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 659, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer

我做错了什么?

【问题讨论】:

【参考方案1】:

你有两个问题:

1 - subprocess.call() 需要 list 参数,而不是多个参数:

#wrong
subprocess.call('cp', in, out)
#right
subprocess.call(['cp', in, out])

2 - in 是 python 保留关键字,将其更改为 inp

#wrong
subprocess.call(['cp', in, out])
#right
subprocess.call(['cp', inp, out])
    

【讨论】:

@DanielHolden 什么奇怪的输出?顺便说一句,input() 是一个内置函数,所以使用类似inp 第一个错误很容易犯。

以上是关于子进程 cp 返回错误 - bufsize 必须是整数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

错误Python子进程调用复制文件。没有文件,失败,但返回1.为什么?

是否可以在 python 中中断 Popen 子进程?

带有子进程、IPC、SMP 的封闭 fd

Python 子进程返回错误的退出代码

python子进程不捕获pv命令的stderr

子进程 已安装 pre-removal 脚本 返回了错误号 1或2 与 子进程 已安装 post-installation 脚本 返回了错误号 1或2