【问题标题】: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 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2013-04-08
      • 1970-01-01
      • 2020-08-11
      相关资源
      最近更新 更多