【问题标题】:how to automate running input/output in command line如何在命令行中自动运行输入/输出
【发布时间】:2020-01-04 02:51:57
【问题描述】:
我有一个将 json 转换为 csv 的脚本。是否有一个 cron 可以在命令行中自动执行以下操作以每小时左右运行一次?也许在每次运行后添加一个数字到输出?
python3 file.py --input input.json --output output.csv
【问题讨论】:
标签:
python
python-3.x
command-line
【解决方案1】:
不确定您使用的是哪个系统,但您的用例有 crontab。
您可以按照此答案根据您的操作系统安装它How to install cron。
之后你的命令应该是:
0 * * * * python3 file.py --input /<_absolute_path>/input.json --output /<_absolute_path>/output.csv
如果是后缀的话,最好自己写个脚本
#!/bin/bash
suffix=$(date +"%m%d%H")
python3 file.py --input /<_absolute_path>/input.json --output /<_absolute_path>/output.csv
mv /<_absolute_path>/output.csv "/<_absolute_path>/output_$suffix.csv"
然后在 cron 选项卡中使用它
0 * * * * bin/bash /absolute/path/to/your/script
【解决方案2】:
"crontab -e" 来编辑你的 crontab。
将此作为全部一行添加到您的 crontab 的末尾:
30 * * * * /path/to/python3 /path/to/file.py --input /path/to/input.json --output /path/to/output.csv.`date +%Y%m%d%H%M` > /dev/null 2>&1
(如果您想在出现标准错误或进程退出时收到电子邮件,请不要使用添加:> /dev/null 2>&1
)
这将在 30 分钟标记处每小时运行一次。它将创建附加日期和时间戳的输出。如果你想做一个序列号(不是日期时间),那么它有点复杂,你需要保留一个包含当前序列的文件并在每次 crontab 运行时更新它。
你会发现当日期被这样格式化时,YEARMONTHDAYHOURMINUTE 结果数字按顺序排序,所以对我来说它通常比顺序号更好。
如果你真的需要序列号而不是日期戳,那么编写一个小的 shell 脚本;使用“expr”将存储在文件中的数字加 1,然后运行您的进程,然后更新序列文件:
#!/bin/bash
OLD_SEQ=`cat /path/to/sequence.dat`
NEW_SEQ=`expr ${OLD_SEQ} + 1`
python3 file.py --input input.json --output output.csv.${NEW_SEQ}
echo ${NEW_SEQ} > /path/to/sequence.dat
然后你可以用同样的方式从 cron 调用这个 bash 脚本。