如何在 Popen 中将某些内容附加到正在运行的文件中?

问题描述

交易如下:

#!/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) 中完成的。我是一个初学者,所以是的,我可能错过了一些明显的东西。来这里之前我已经检查了所有内容,但我还没有找到任何具体的答案。

我可能把 stdoutstdin 搞砸了,因为我对这些概念不是 100% 清楚。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)