问题描述
交易如下:
#!/usr/bin/env python3
import subprocess
from subprocess import Popen,PIPE
var = '* * * * * mkdir /etc/STATISTICS\n'
try:
with open('./.file_temp','w') as f:
f.write(var)
p1 = Popen(['crontab','-e'],stdout=PIPE,stdin=open('./.file_temp','r'),shell=True)
print ('The first one got executed.')
except FileNotFoundError:
subprocess.run(['touch','./.file_temp'])
f.write(var)
p1 = Popen(['crontab',shell=True)
print ('The second got executed.')
delete = Popen(['rm','-f','./.file_temp'])
print ('The temp file has been deleted.')
首先,您正在查看的代码是我编写的一个虚拟代码,只是为了让您了解是什么困扰着我 - 真正的代码更好一些。
因此,我想使用 Popen 来启动 crontab -e
并附加在名为 var
的变量中找到的任何内容。我试过了
stdin=var
但这给了我 AttributeError: 'str' object has no attribute 'fileno'
,这让我制作了一个文件来存储我的变量。现在,该文件用作 crontab -e
的输入参数,由 Popen 本身启动。
当我运行它时,它就像一个魅力。在 crontab 中,我看到确实执行了我的变量。太棒了!
Buuut,这里有一个问题:每当我启动我的这个小程序时,它会在程序执行之前删除 crontab 文件中的所有内容,并将 .file_temp
的内容写入 crontab 文件。我不想要那个。我想追加到 crontab 文件,而不是删除所有内容并仅输入该临时文件中的内容。
那个 .file_temp
不再是临时文件,因为它必须与所有命令一起存在于系统上(由我的程序独家提供),否则,它将摆脱一切......这不是我们想要的影响。
想象一下有人手动将一些内容写入 crontab 文件,然后在一段时间后决定使用我的程序。那么在这种情况下,如果我的程序被启动,它将只加载自身定义的内容(参考 .file_temp),并很好地运行手动给定的命令。
简而言之,如何向 Popen 运行的程序附加一些内容?
注意:这是在 Linux (Ubuntu) 中完成的。我是一个初学者,所以是的,我可能错过了一些明显的东西。来这里之前我已经检查了所有内容,但我还没有找到任何具体的答案。
我可能把 stdout
和 stdin
搞砸了,因为我对这些概念不是 100% 清楚。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)