gpt4 book ai didi

python - 为什么从 python 调用 shopt 会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:57 25 4
gpt4 key购买 nike

# shopt -s extglob

# python3
Python 3.4.0 (default, Sep 8 2015, 23:36:36)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import check_call
>>> check_call(['shopt', '-s', 'extglob'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/subprocess.py", line 552, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/lib/python3.4/subprocess.py", line 533, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.4/subprocess.py", line 848, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.4/subprocess.py", line 1446, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'shopt'

shopt 似乎不在我的路径中,但 bash 却在:

# echo $PATH | grep shopt
# whereis shopt
# whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

最佳答案

如果您想要“rm 目录中除两个文件之外的所有文件”,您可以直接从 Python 执行此操作,而无需调用 shell。该程序删除 /tmp/r 中的所有文件,除了我想保留的两个文件。

#!/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))

关于python - 为什么从 python 调用 shopt 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com