Почему я получаю сообщение об ошибке: «размер буфера должен быть целым числом» для команды mv shell

#python #shell

#python #оболочка

Вопрос:

Почему я получаю сообщение об ошибке: «размер буфера должен быть целым числом»

после этой строки:

 pid2 = subprocess.Popen(["mv"],glob.glob(os.path.basename(filename) '[0-9]*'),folder);
 

Это просто команда mv с расширением оболочки блога.

Я хочу, чтобы что-то вроде mv filename[0-9]* folder

Ответ №1:

Прежде всего, это Python, поэтому вам не нужна точка с запятой в конце строки. Затем вы хотите указать один аргумент, т.Е.

 pid2 = subprocess.Popen(["mv"]  
                        glob.glob(os.path.basename(filename) '[0-9]*')  
                        [folder])
 

В противном случае вы указываете результат glob.glob в качестве второго аргумента ( bufsize ) of subprocess.Popen .

Также обратите внимание, что вызов mv не требуется, Python уже имеет функциональность для перемещения файлов, реализованных в shutil.move :

 for f in glob.glob(os.path.basename(filename) '[0-9]*'):
    shutil.move(f, folder)
 

Ответ №2:

В качестве первого аргумента Popen() принимает либо строку, либо список аргументов. Вы просто передаете ["mv"] ; glob.glob(...) и folder интерпретируются как второй и третий аргументы subprocess.Popen() , которые являются bufsize и executable .

Попробуйте:

 args = ["mv"]   [glob.glob(os.path.basename(filename) '[0-9]*')]   [folder]
pid2 = subprocess.Popen(args)