替换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脚本中的字符串并执行脚本的主要内容,如果未能解决你的问题,请参考以下文章
PHP / Python Beanstalk 套接字事件作业