gpt4 book ai didi

python - 使用 Python 中的日期时间将配置文件 ID 调用到 Linux 命令中

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:08 25 4
gpt4 key购买 nike

我正在尝试使用 Python 中的 Linux 命令编写脚本以将以下输出获取到文件夹(YYYYMMDDHHMMSS = 当前日期和时间),ID 在配置文件中

1234_YYYYMMDDHHMMSS.txt
12345_YYYYMMDDHHMMSS.txt
12346_YYYYMMDDHHMMSS.txt

我有一个包含 ID 列表的配置文件

id1 = 1234
id2 = 12345
id3 = 123456

我希望能够在 python 中循环遍历这些并将它们合并到 linux 命令中。

目前,我的 linux 命令是在 python 中硬编码的

import subprocess
import datetime

now = datetime.datetime.now()
subprocess.call('autorep -J 1234* -q > /home/test/output/1234.txt', shell=True)
subprocess.call('autorep -J 12345* -q > /home/test/output/12345.txt', shell=True)
subprocess.call('autorep -J 123456* -q > /home/test/output/123456.txt', shell=True)


print now.strftime("%Y%m%d%H%M%S")

日期时间已定义,但当前不执行任何操作,只是在我想将其合并到输出 txt 文件时将其打印到控制台。但是,我希望能够编写一个循环来做这样的事情

subprocess.call('autorep -J id1* -q > /home/test/output/123456._now.strftime("%Y%m%d%H%M%S").txt', shell=True)
subprocess.call('autorep -J id2* -q > /home/test/output/123456._now.strftime("%Y%m%d%H%M%S").txt', shell=True)
subprocess.call('autorep -J id3* -q > /home/test/output/123456._now.strftime("%Y%m%d%H%M%S").txt', shell=True)

我知道我需要使用 ConfigParser 并且目前已经编写了这篇文章,它只是将 ID 从配置文件打印到控制台。

from ConfigParser import SafeConfigParser
import os


parser = SafeConfigParser()
parser.read("/home/test/input/ReportConfig.txt")

def getSystemID():
for section_name in parser.sections():
print
for key, value in parser.items(section_name):
print '%s = %s' % (key,value)
print


getSystemID()

但正如帖子开头所述,我的目标是能够遍历 ID,并将它们合并到我的 linux 命令中,同时将日期时间格式添加到文件末尾。我想我所需要的只是上述函数中的某种 while 循环,以获得我想要的输出类型。但是,我不确定如何将 ID 和日期时间调用到 linux 命令中。

最佳答案

到目前为止,您已经拥有了大部分所需的东西,只是缺少一些东西。

首先,我认为使用 ConfigParser 对此有点矫枉过正。但它很简单,所以让我们继续吧。让我们将 getSystemID 更改为返回您的 ID 的生成器,而不是将它们打印出来,这只是一行更改。

parser = SafeConfigParser()
parser.read('mycfg.txt')
def getSystemID():
for section_name in parser.sections():
for key, value in parser.items(section_name):
yield key, value

有了生成器,我们可以直接在循环中使用 getSystemID,现在我们需要将其传递给子进程调用。

# This is the string of the current time, what we add to the filename
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')

# Notice we can iterate over ids / idnumbers directly
for name, number in getSystemID():
print name, number

现在我们需要构建子流程调用。上面的大部分问题是知道如何格式化字符串,语法描述为 here .

我还将就您如何使用 subprocess.call 做两点说明。首先,传递参数列表而不是长字符串。这有助于 python 知道要引用哪些参数,因此您不必担心。您可以在 subprocess 中阅读相关信息和 shlex文档。

其次,您在命令中使用 > 重定向输出并且(正如您注意到的那样)需要 shell=True 才能工作。 Python 可以为您重定向,您应该使用它。

从我在 foor 循环中离开的地方继续。

for name, number in getSystemID():
# Make the filename to write to
outfile = '/home/test/output/{0}_{1}.txt'.format(number, now)

# open the file for writing
with open(outfile, 'w') as f:
# notice the arguments are in a list
# stdout=f redirects output to the file f named outfile
subprocess.call(['autorep', '-J', name + '*', '-q'], stdout=f)

关于python - 使用 Python 中的日期时间将配置文件 ID 调用到 Linux 命令中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913170/

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