Я пишу скрипт, который будет перемещать файлы в каталог .trash в домашней папке пользователя. Я хочу, чтобы добавить возможность опорожнить каталог мусора, вызвав rm -rf /home/user/.trash/*
с помощью subprocess.call питона()rm все файлы в каталоге с помощью python subprocess.call
~$ touch file1
~$ trash file1
['mv', 'file1', '/home/rodney/.trash/']
~$ ls .trash
file1
~$ trash --empty
['rm', '-rf', '/home/rodney/.trash/*']
~$ ls .trash
file1
Как вы можете видеть, что команда ет не удалить содержимое корзины. Однако, если я выполняю команду непосредственно в командной строке, она работает.
~$ rm -rf /home/rodney/.trash/*
~$ ls .trash
~$
Выход из следующего кода
print(cmd)
subprocess.call(cmd)
Что странно об этом, если я исключить * из последнего аргумента в списке CMD то подпроцесс вызов работает, но также удаляет цельные .trash. Я не хочу удалять каталог .trash; только все под ним.
Резюмируя вопрос
Это работает
import subprocess
subprocess.call(['rm', '-rf', '/home/rodney/.trash/'])
Это не
import subprocess
subprocess.call(['rm', '-rf', '/home/rodney/.trash/*'])
Почему?
Почему вы выкладывая на 'rm', чтобы сделать что-то же просто, как удаление файлов в Python? –
Я думал, что было бы быстрее писать, а не создавать список файлов и перемещать все подкаталоги. – rodneyxr
Возможно, но в конечном итоге это принесет вам больше пользы, чтобы изучить API, которые может предложить Python. См. [Мой ответ] (http://stackoverflow.com/a/31989328/119527). В противном случае вы можете просто написать это как скрипт Bash. –