为什么从python调用shopt时失败?
如果希望“在一个目录中管理除两个文件以外的所有文件”,则可以直接从Python执行,而无需调用shell。此程序将删除为什么从python调用shopt时失败?,python,linux,shopt,Python,Linux,Shopt,如果希望“在一个目录中管理除两个文件以外的所有文件”,则可以直接从Python执行,而无需调用shell。此程序将删除/tmp/r中的所有文件,但我要保留的两个文件除外 # echo $PATH | grep shopt # whereis shopt # whereis bash bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz 为了好玩,这里有一个提供相同功能的组合模块和脚本: #!/usr/bin/python3
/tmp/r
中的所有文件,但我要保留的两个文件除外
# echo $PATH | grep shopt
# whereis shopt
# whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
为了好玩,这里有一个提供相同功能的组合模块和脚本:
#!/usr/bin/python3
import os
keepers = ['safe', 'also_safe.txt']
os.chdir('/tmp/r')
for filename in os.listdir('.'):
if filename not in keepers:
print('Removing %s' % (filename,))
os.remove(filename)
我猜它不在您的路径上?
shopt
是一个内置的bash,而不是命令(即PATH
中某个地方的可执行文件)。check_调用(['/bin/bash','-c','shopt-s extglob')
。但是shell退出,设置丢失…PROTIP:哪个shopt
会告诉你你想做什么?为什么要尝试以编程方式设置shell选项?我们也许能帮上忙,但我猜目前发布的内容不是你真正的问题。
#!/usr/bin/python3
import os
keepers = ['safe', 'also_safe.txt']
os.chdir('/tmp/r')
for filename in os.listdir('.'):
if filename not in keepers:
print('Removing %s' % (filename,))
os.remove(filename)
#!/usr/bin/python3
import os
import argparse
import sys
def safe_remove(dirs, exclude, verbose, dry_run):
for directory in dirs:
if verbose or dry_run:
print("Checking directory '%s'" % (directory,))
for filename in os.listdir(directory):
if filename not in exclude:
filename = os.path.join(directory, filename)
if verbose or dry_run:
print('rm %s'%filename)
if not dry_run:
os.remove(filename)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Remove files, with exceptions')
parser.add_argument('-x', '--exclude',
metavar='FILE',
default=[],
nargs='+',
help='files to exclude')
parser.add_argument('dirs',
metavar='DIR',
nargs='+',
help='directories to clean')
parser.add_argument('-v', '--verbose',
action='store_true',
help='Print actions')
parser.add_argument('-n', '--dry-run',
action='store_true',
help='Print, but do not perform, actions')
args = parser.parse_args()
safe_remove(**vars(args))