Python的子进程模块可以替换crontab中shell中的脚本吗?

时间:2018-01-23 00:10:45

标签: python shell subprocess

我正在处理一项任务,如果用户的主目录属于某个组,则应将其更新为某个值。所以,假设用户被添加到某个组X,现在他/她的主目录应该是/ home / X.我应该把它放在crontab上工作,我的问题是:

这是一种更安全的方法吗?或者我是否应该总是喜欢在shellcript中编写这种任务?我仍然不清楚我是否总能使用python来替换shell,因为处理它更简单。

如果某人有与使用python over shell的专业人士的链接,并且在生产群集中真正推荐的时候,我会非常感谢。

1 个答案:

答案 0 :(得分:0)

来自the python subprocess page

  

与其他一些popen函数不同,这种实现永远不会   隐式调用系统shell。这意味着所有角色,   包括shell元字符,可以安全地传递给child   流程。如果显式调用shell,则通过shell = True,它是   应用程序有责任确保所有空白和   适当引用元字符以避免壳注入   漏洞。

     

使用shell = True时,可以使用shlex.quote()函数   正确地转义字符串中的空格和shell元字符   将用于构造shell命令。

是否需要使用shell取决于您如何调用它。来自the subprocess popen info

  

所有调用都需要args,并且应该是字符串或序列   程序参数。通常提供一系列论证   首选,因为它允许模块处理任何所需的   转义和引用参数(例如,允许文件中的空格   名)。如果传递单个字符串,则任何一个shell都必须为True(请参阅   或者字符串必须简单地命名要执行的程序   没有指定任何参数。

因此,如果您可以使用元素列表调用子进程,而不是构建字符串,并且在python中比在shell脚本中更容易实现,那么它应该不是问题。

很抱歉这些链接是不同版本的python,它看起来更清晰,但是他们说了类似的东西,所以请检查你的python版本是否正确。