Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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
在给定--exclude选项时,使用Python子流程执行tar命令不会排除某些文件_Python_Tar - Fatal编程技术网

在给定--exclude选项时,使用Python子流程执行tar命令不会排除某些文件

在给定--exclude选项时,使用Python子流程执行tar命令不会排除某些文件,python,tar,Python,Tar,我正在使用python子流程模块执行下面的tar命令 import subprocess cmd = ["/bin/tar", "-czf", "file.tar.gz", "./dir", "--exclude", "\"*cpp*\""] subprocess.Popen(cmd) 但排除cpp文件的情况并未发生 当我在shell提示符中运行相同的命令时,它工作正常。我做错了什么?去掉字面引号。即: cmd = ["/bin/tar", "-czf", "file.tar.gz", "--

我正在使用python子流程模块执行下面的tar命令

import subprocess
cmd = ["/bin/tar", "-czf", "file.tar.gz", "./dir", "--exclude", "\"*cpp*\""]
subprocess.Popen(cmd)
但排除cpp文件的情况并未发生


当我在shell提示符中运行相同的命令时,它工作正常。我做错了什么?

去掉字面引号。即:

cmd = ["/bin/tar", "-czf", "file.tar.gz", "--exclude", "*cpp*", "./dir"]
否则,您将只排除名称以
开头和结尾的文件



解释原因:当您在shell中编写
--exclude“*cpp*”
时,这些引号是语法性的,而不是文字性的。它们告诉shell不要用文件列表替换
*cpp*
;它们不会传递给
tar
本身。

省略文字性引号。即:

cmd = ["/bin/tar", "-czf", "file.tar.gz", "--exclude", "*cpp*", "./dir"]
否则,您将只排除名称以
开头和结尾的文件



解释原因:当您在shell中编写
--exclude“*cpp*”
时,这些引号是语法性的,而不是文字性的。他们告诉shell不要用文件列表替换
*cpp*
;它们不会传递给
tar
本身。

我认为
--exclude
*cpp*
可能应该在同一个字符串中,省略文字引号。有一个
=
缺少()
“--exclude=*cpp*”
@uphill,将模式作为独立于
--exclude
的参数传递是合法的;在这种情况下,不需要
=
。因此,您描述的用法是有效的,但不是必需的。我认为
--exclude
*cpp*
可能应该在同一个字符串中,省略文字引号。有一个
=
缺少()
“--exclude=*cpp*”
@uphill,将模式作为独立于
--exclude
的参数传递是合法的;在这种情况下,不需要
=
。因此,您描述的用法是有效的,但不是必需的。这两种格式对我都适用cmd=[“/bin/tar”、“-cvzf”、“file.tar.gz”、“/dir”、“--exclude={0}”。format('cpp')]cmd=[“/bin/tar”、“-cvzf”、“file.tar.gz”、“/dir”、“--exclude”、“{0}”。format('*cpp')]]@IbrahimQuraish,……虽然我不确定这是什么意思<代码>“{0}”。格式(“*cpp”)==“*cpp”始终为真。顺便说一句,如果您想在注释中提供文字代码,而不是将像
*
这样的字符作为格式处理而不是打印,请使用反勾号。这两种格式都适用于我cmd=[“/bin/tar”、“-cvzf”、“file.tar.gz”、“/dir”、“-exclude={0}”。format('cpp')]cmd=[“/bin/tar”、“-cvzf”、“file.tar.gz”、“/dir”、“--exclude”、“{0}”.format('*cpp')]@IbrahimQuraish,…虽然我不确定这是什么意思<代码>“{0}”。格式(“*cpp”)==“*cpp”始终为真。顺便说一句,如果您想在注释中提供文字代码,而不将
*
等字符视为格式而不是打印,请使用反勾号。