替换python脚本中的字符串并执行脚本

Posted

技术标签:

【中文标题】替换python脚本中的字符串并执行脚本【英文标题】:Replace a string in a python script and execute the script 【发布时间】: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 谢谢。我将使用命令行参数 【参考方案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)

【讨论】:

以上是关于替换python脚本中的字符串并执行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell脚本中修改添加替换指定文件中的内容

从 Google BigQuery 中过滤或替换非英文字符

PHP / Python Beanstalk 套接字事件作业

从 php 执行的 python 脚本给出错误

如何根据替换字符串在 Oracle Apex 中调整安装脚本?

如何在 VBA 访问中执行 python 脚本?