嗨,我正在尝试使用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')
答案 0 :(得分:2)
您需要分别传递参数。由于-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.
答案 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/')