在给定--exclude选项时,使用Python子流程执行tar命令不会排除某些文件
我正在使用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", "--
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”始终为真。顺便说一句,如果您想在注释中提供文字代码,而不将*
等字符视为格式而不是打印,请使用反勾号。