在Python3中运行的bash命令中传递自定义日期/时间
我正在尝试运行一个python程序/包,其中包含py3中的一些自定义bash命令。纯python代码的其余部分正常工作,但是这个bash命令在获取输出文件时给了我很多麻烦。目前,我在Python3(py文件)中使用此命令 但在输出目录中,我必须获得名称如下的文件在Python3中运行的bash命令中传递自定义日期/时间,python,shell,Python,Shell,我正在尝试运行一个python程序/包,其中包含py3中的一些自定义bash命令。纯python代码的其余部分正常工作,但是这个bash命令在获取输出文件时给了我很多麻烦。目前,我在Python3(py文件)中使用此命令 但在输出目录中,我必须获得名称如下的文件 biden_2021-01-03.txt and trump_2021-01-03.txt 必须包括今天的日期。当我试图通过修复文件名来执行此操作时,它会执行python程序/包所需的操作,但当我试图根据日期文件操作对其进行自定义时,
biden_2021-01-03.txt and trump_2021-01-03.txt
必须包括今天的日期。当我试图通过修复文件名来执行此操作时,它会执行python程序/包所需的操作,但当我试图根据日期文件操作对其进行自定义时,它只会给我具有名称的文件:
biden_.txt and trump_.txt
但是里面没有日期。有人能告诉我哪里做错了,或者有什么更简单的解决方法来实现这一点吗?我在/使用Python 3.5.3、Debian GNU/Linux 9操作系统、内核:Linux 4.9.0-9-amd64、体系结构:x86-64运行此程序。如果这只是文件名,您可以通过
datetime
模块实现
>>> from datetime import datetime
>>> today_date = datetime.today().strftime('%Y-%m-%d')
>>> cmd = f"-d biden_{today_date}.txt --function=linear -f trump_{today_date}.txt"
>>> cmd
'-d biden_2021-01-03.txt --function=linear -f trump_2021-01-03.txt'
os.system
为每个调用创建一个新的子shell,因此now
env变量在后续调用中不可用
您可以直接在Python中生成日期字符串,并将其作为格式字符串传递:
now = datetime.datetime.now().date().isoformat()
os.system("-d biden_{now}.txt --function=linear -f trump_{now}.txt".format(now=now))
os.system("-i trump_{now}.txt --daemon --quiet --port 8022".format(now=now))
或者您可以将now
变量放入Python环境中,并在os.system
调用中引用它:
os.environ['now'] = datetime.datetime.now().date().isoformat()
os.system("-d biden_${now}.txt --function=linear -f trump_${now}.txt")
os.system("-i trump_${now}.txt --daemon --quiet --port 8022")
系统调用正在新shell中生成。见样品 样本1:
os.system("now=$(date +%Y-%m-%d)")
os.system("echo $now")
样本2:
os.system("now=$(date +%Y-%m-%d); echo $now")
2021-01-03
你可以组合成这样的东西
os.system("echo \"Your file name is biden`date +%Y-%m-%d`.txt\"")
Your file name is biden2021-01-03.txt
但是你的时间会慢慢地改变,这取决于你的处理需要多长时间
如果您不希望时间漂移,而是希望与开始时间相匹配,请使用python date,因为在此期间通过此解决方案在保存文件方面效果很好。但是当我在单个bash命令中同时使用第二个自定义变量(比如{port_number}和{today_date})运行它时,它就不起作用了。如果我只考虑这里的日期,它与时间有什么联系?处理过程最多不会超过30到40分钟。如果不考虑时间,是否有任何影响?这两种解决方案都非常适合我。例如,我在这里使用第二个解决方案,然后如何包含第二个自定义变量。我尝试了两个变量,比如--#os.environ['now']=datetime.datetime.now().date().isoformat(),对于下一个命令,端口号8022现在是一个变量,所以我添加了一个函数,它每次都给我一个新的端口号。。。假设from#os.environ['newport']=addr[1],然后我尝试执行#os.system(“-I trump${now}.txt--daemon--quiet--port${newport}”),但它抛出了错误。
os.system("echo \"Your file name is biden`date +%Y-%m-%d`.txt\"")
Your file name is biden2021-01-03.txt