gpt4 book ai didi

Python 和 Tar 命令 shell=True

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:45 26 4
gpt4 key购买 nike

我写了这个脚本来压缩一些备份:

date = str(now.year)+str(now.month)+str(now.day)
tar="tar -pczf "+date+"backup_lucas.tar.gz /home/lucas/backup/"
subprocess.Popen(tar)

但后来我得到:

  File "test.py", line 21, in <module>
subprocess.Popen(tar)
File "/usr/lib/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

当我将 add shell=True 添加到 Popen 命令时,它起作用了:

subprocess.Popen(tar,shell=True)

但是我听说要避免使用 shell=True,因为它有时不安全(?)。

如何在不使用 shell=True 的情况下成功发出命令?

最佳答案

当 shell=False 时,您需要通过列表传递命令:

date = str(now.year)+str(now.month)+str(now.day)
filename = date + "backup_lucas.tar.gz"
subprocess.Popen(['tar', '-pczf', filename, '/home/lucas/backup/'])

编辑:文档中的重要部分:

"在 Unix 上,shell=False(默认):在这种情况下,Popen 类使用 os.execvp() 来执行子程序。args 通常应该是一个序列。如果为 args 指定了一个字符串,它将用作要执行的程序的名称或路径;这仅在程序未被赋予任何参数时才有效。” - http://docs.python.org/library/subprocess.html#popen-constructor

关于Python 和 Tar 命令 shell=True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com