繁体   English   中英

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

[英]Python's subprocess module can replace scripts in shell in crontab?

我正在执行一项任务,如果该任务属于某个组,该任务应将用户的主目录更新为某个值。 因此,假设某个用户已添加到某个X组中,那么他/她的主目录应该是/ home / X。 我应该将其用于crontab,我的问题是:

这样更安全吗? 还是我应该总是更喜欢在shellscript中编码这种任务? 我仍然不清楚是否可以始终使用python替换shell,因为它更易于处理。

如果有人与在外壳上使用python的专家有联系,并且在生产集群中真正推荐使用python时,我将非常感谢。

python子进程页面

与某些其他popen函数不同,此实现绝不会隐式调用系统外壳程序。 这意味着所有字符(包括外壳元字符)都可以安全地传递给子进程。 如果通过shell = True显式调用了shell,则应用程序有责任确保所有空白和元字符都被正确引用,以避免shell注入漏洞。

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

是否需要使用外壳取决于您如何调用它。 在子流程popen info中

args是所有调用所必需的,并且应为字符串或程序参数序列。 通常最好提供一个参数序列,因为它允许模块处理任何必需的参数转义和引用(例如,允许在文件名中保留空格)。 如果传递单个字符串,则外壳程序必须为True(请参见下文),否则该字符串必须简单地命名要执行的程序而无需指定任何参数。

因此,如果您可以使用一个元素列表来调用一个子流程,而不是构建一个字符串,并且在python中比在shell脚本中更容易做到这一点,那应该不是问题。

抱歉,链接是python的不同版本,看似更清晰,但是它们说的类似,因此请为您的python版本检查正确的链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM