【问题标题】:Replace a string in a python script and execute the script替换python脚本中的字符串并执行脚本
【发布时间】:2021-01-10 02:31:11
【问题描述】:

我有一个将 CSV 文件合并在一起的 Python 脚本。在执行脚本之前,我想替换文件中的字符串。我可以使用这个 sed 命令来做到这一点 -

sed 's/state/MI/' my_script.py

如何将其传递给 Python 执行?到目前为止,我已经尝试过以下方法-

python "$(sed 's/state_name/MI/' my_script.py)"

这不起作用,但是当我用 PSQL 尝试同样的事情时,它确实 -

psql -d db -c "$(sed 's/state_name/MI/' summary.sql)"

【问题讨论】:

  • 不能将你想要的字符串作为参数发送到 python 文件吗?或者您是否出于某种原因积极尝试避免使用命令行参数?
  • 在IDE中打开.py文件并进行替换不是更简单吗?也就是说,如果经常需要重构脚本(例如,采用 CLI 参数)可能会更好
  • @VincePayandeh 谢谢。我将使用命令行参数

标签: python sed


【解决方案1】:

您听起来好像知道如何使用命令行参数,但只是为了完成,对于那些将来阅读此问题并且不确定如何在 python 中使用命令行参数的人:

在代码中接收命令行参数的一种简单快捷的方法是使用sys 模块的argv 属性,该模块是一个包含发送到脚本的所有参数的列表。当调用 python 文件时,sys.argv 捕获的第一个参数是脚本本身的名称。之后会捕获任何命令行参数:

import sys
arguments = sys.argv
# make sure user really sent an argument, or else set it to some default value
if len(arguments)>1:
    desired_string = arguments[1]
else:
    desired_string = "Some_default_value"

【讨论】:

    【解决方案2】:

    您可以使用subprocess 调用命令行程序

    import subprocess
    
    def func():
        with subprocess.Popen(['sed', 's/state/MI/', "my_script.py"], stdout=subprocess.PIPE) as process:
            stdout, stderr = process.communicate()
        print(stdout)
    

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2022-07-21
      • 2015-01-16
      相关资源
      最近更新 更多