Подпроцесс с Python 3.8 и Linux Bash

У меня есть сценарий Python, который считывает имена файлов из oldFiles.txt,

Итерация и обновление имен файлов в oldFiles.txt - это нормально, но я все еще не мог понять, как запустить подпроцесс для достижения моей цели, как описано выше. Это то, что я пришел, большое вам спасибо. Извините за мое неверное объяснение.

Фактический результат mv: cannot stat '/home/user/sdafsdfs_jane.doc 12fgdf-jane.csv files_jane.tx': Нет такого файла или каталога Из вывода я могу поймите, что, возможно, путь прикрепляется только к первому newName, а не к остальным именам файлов, или может быть, что bash читает все имена файлов как одно имя файла, но я все еще не знаю, как решить эту проблему.

PS: Я не показываю свое имя пользователя и заменяю его на пользователь . Пожалуйста, измените его на свое текущее имя пользователя.

PS: Я вынужден использовать модули sys и subprocess, а также был вынужден применить все упомянутые детали, это оценка домашнего задания.

Большое спасибо за вашу поддержку и понимание.

#!/usr/bin/env python3
import sys
import subprocess
with open(sys.argv[1]) as f:
    for name in f.readlines():
        newName = name.strip()
        lastName = newName.replace("jane", "jdoe")
        subprocess.run(["mv", "/home/user/"+newName, "/home/user/"+lastName])

ОБНОВЛЕНИЕ

Я изменил сценарий, чтобы возвращать список, чтобы я мог безупречно перебирать элементы , на самом деле скрипт успешно применяется только к первому имени файла, в то время как еще к двум другим, какие-нибудь идеи, пожалуйста? Большое спасибо.

#!/usr/bin/env python3
import sys
import subprocess
with open(sys.argv[1], 'r') as f:
    content1 = f.readlines()
    content2 = [x.strip() for x in content1]
    content3 = [item.replace("jane", "jdoe") for item in content2]
    for x in content2:
      for i in content3:
        subprocess.run(['mv', '/home/ninja-coder/'+x, '/home/ninja-coder/'+i])
0
задан 11 July 2020 в 23:56

2 ответа

Thanks to @Jonatã and @HackLab for their hints. After several debugging I solved this very annoying assessment but I learned lots of things, again, one of the crucial success's secrets is PRACTICE , here is the final code

#!/usr/bin/env python3
import sys
import subprocess
with open(sys.argv[1], 'r') as f:
    content1 = f.readlines()
    content2 = [x.strip() for x in content1]
    content3 = [item.replace("jane", "jdoe") for item in content2]
    res = dict(zip(content2, content3))
    for key, value in res.items():
        subprocess.run(['mv', '/home/ninja-coder/'+key, '/home/ninja-coder/'+value])
0
ответ дан 30 July 2020 в 22:09

Я считаю, что код в этом ответе сбивает с толку и сложен для понимания. Вот более простая версия:


import sys
import subprocess

file = open(sys.argv[1])
for line in file:
        source = line.strip()
        dest = line.replace("jane", "jdoe")
        subprocess.run(['mv', '<homedirectorypath>'+source, '<homedirectorypath>'+dest])
file.close()
0
ответ дан 14 November 2020 в 18:42

Другие вопросы по тегам:

Похожие вопросы: