【问题标题】:Python subprocess.call is not running the same as with python shellPython subprocess.call 与 python shell 的运行方式不同
【发布时间】:2020-03-30 04:37:21
【问题描述】:

我正在尝试将 2 个 python 脚本(before.py 和 after.py)合并为一个,因为我需要为 python 脚本设置一个 cron 作业才能运行两个脚本一次执行。

这两个脚本是连接在一起的,其中 after.py (tmp1.txt) 处理的文件是由 before.py 生成的

脚本的原始顺序是

python3 before.py someCsv.csv > tmp1.txt
python3 after.py tmp1.txt >tmp2.txt

在 before.py 中,我添加了这个 subprocess.call(' python3 after.py tmp1.txt > tmp2.txt', shell=True)

我相信这将允许在 python 中执行运行 shell 命令。

如果我直接运行脚本(after.py),它会返回 44,623 条记录。 但是如果我通过 subprocess.call() 在 before.py 中运行 after.py,它只返回 44,619 条记录。

我在两个脚本中使用相同的文件,即 tmp1.txt。

我尝试了 subprocess.call()、subprocess.run() 和 os.system()。看来我在这里做错了什么。

【问题讨论】:

  • 第一个脚本写完文件了吗?为什么不直接在 before 脚本中调用 after 脚本中的方法?
  • 感谢您的评论。这是 'before.py' (imgur.com/I7opL3Q) 的代码,它应该按预期运行。我不明白的是python3 after.py tmp1.txt > tmp2.txt 应该给出相同的结果。应该和在'before.py'脚本之后调用方法一样吧?
  • before.py 打印它的输出,它不写入文件,你几乎可以肯定在前一次运行的数据上调用。 after.py 是做什么的?您也许可以将它们组合成一个脚本
  • 啊,我现在慢慢明白了。对于after.py,我只是为了合并它而把它变成这样(imgur.com/a8Jq4NA)。当我转储 txt 文件的记录数时,我只想能够显示相同的记录。当我通过 before.py 检查 create tmp1.txt 时,记录是 44,623,所以它返回 44,619 有点奇怪。为什么缺少 4 条记录? :o

标签: python subprocess


【解决方案1】:

我没有在 python shell 中通过 ">" 将结果输出到新文件,而是在 before.py 中创建了一个新文件,以保证 before after.py 将运行,tmp1.txt 已 100% 完成。这使我能够获得完整的 44,623 条记录。

这是 before.py 的结尾。我没有直接输出到 python shell 中的文件,而是在脚本本身中创建了文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2017-09-24
    • 2011-02-22
    • 2016-10-31
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多