rm -rf не удаляет каталоги через сценарий python fork execl - PullRequest
0 голосов
/ 03 октября 2018

Привет, я пытаюсь использовать python fork и execl, чтобы создать новый процесс bash и удалить каталог 'temptdir'.

Я написал следующий код:

import os

pid = os.fork()
if pid == 0:
    os.execl('/bin/rm', 'rm-rf', 'temptdir') # temptdir is a directory in home folder. 

Я ожидаю, что он создаст новый процесс bash и запустит следующую команду в bash:

rm -rf temptdir

иудалите каталог temptdir, но он показывает мне:

rm-rf: temptdir: is a directory

Есть идеи, почему он не удаляет каталог?Кроме того, как это исправить?

Наконец, в документах Python Fortmat команды python execl указывается так:

execl(  path, arg0, arg1, ...)

, но если я запускаю:

os.execl('/bin/echo','hello')

ничего не печатает. Почему я должен добавить дополнительный аргумент 'echo' , например:

os.execl('/bin/echo','echo','hello')

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

попробуйте это: всегда лучше проверить путь, по которому вы выполняете операции удаления или удаления.

import shutil
import os
dct = "testrmo"
if os.path.exists(dct):
    os.rmdir(dct)   # <--  if directory is blank
    #shutil.rmtree(dct) # <- - if directory has the contents
else:
    print("Sorry, I can not remove %s Dir." % dct)


shutil.rmtree() deletes a directory and all its contents.

лучше использовать подпроцесс:

import subprocess
subprocess.call(['rm', '-rf', 'temptdir'])

Просто примечание использованияМодуль os при воспроизведении файлов и папок

os.remove() removes a file.

os.rmdir() removes an empty directory.

shutil.rmtree() deletes a directory and all its contents.

pathlib.Path.unlink() removes the file or symbolic link.

pathlib.Path.rmdir() removes the empty directory.

Другой путь - если вам нужно вообще удалить его как родным способом:

os.system('rm -rf /your_directory_path/')
0 голосов
/ 03 октября 2018

Вам необходимо передать аргументы отдельно.Поскольку -r и f являются отдельными аргументами для rm.

import os

pid = os.fork()
if pid == 0:
    os.execl('/bin/rm', 'rm', '-rf', 'temptdir') # temptdir is a directory in home folder.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...