Имена файлов с пробелом, отправка цитируемых команд в оболочку? - PullRequest
1 голос
/ 11 марта 2020

Итак, у меня есть несколько файлов с пробелами, я сначала удаляю пробелы и помещаю «новые имена» в список, затем создаю команду, чтобы взять старое имя файла, которое я помещаю в кавычки, а затем новый имя-файла и переименуйте их, используя mv и subprocess.run - но python выдает ошибки:

Вот код:

import os
import subprocess

file_path = "/home/emil/import/"

files = os.listdir(file_path)

new_files = []


#Create new names

for each in files:
        print ("Taking file: ", each)
        new_name = each.replace(" ", "")
        final_name = file_path + new_name
        new_files.append(final_name)
        cmd = "mv \"" + file_path + each + "\" " + final_name
        print (cmd)
        subprocess.run([cmd])

А вот вывод:

emil@TITAN:~/programmering$ ./call.py
Taking file:  test file1.pdf
mv "/home/emil/import/test file1.pdf" /home/emil/import/testfile1.pdf
Traceback (most recent call last):
  File "./call.py", line 22, in <module>
    subprocess.run([cmd])
  File "/usr/lib/python3.7/subprocess.py", line 472, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'mv "/home/emil/import/test file1.pdf" /home/emil/import/testfile1.pdf': 'mv "/home/emil/import/test file1.pdf" /home/emil/import/testfile1.pdf' 

Как видите, я печатаю переменную cmd, которую я посылаю подпроцессу, и если я запускаю эту команду по отдельности, она прекрасно работает:

emil@TITAN:~/programmering$ mv "/home/emil/import/test file1.pdf" /home/emil/import/testfile1.pdf
emil@TITAN:~/programmering$ ls /home/emil/import/
'test file2.pdf'  'test file3.pdf'   testfile1.pdf 

Так в чем же я ошибаюсь?

...