rm -rf不会通过python fork execl脚本删除目录

时间:2018-10-03 05:43:11

标签: python linux python-3.x bash python-2.7

嗨,我正在尝试使用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 docs上,python execl命令的要旨是:

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

但如果我运行:

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

它不打印任何内容。 为什么我必须添加一个额外的“ echo”参数,例如:

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

2 个答案:

答案 0 :(得分:2)

您需要分别传递参数。由于-rfrm的单独参数。

import os

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

答案 1 :(得分:1)

尝试一下:总是最好检查执行删除或删除操作的路径。

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/')