将 bash 脚本转换为 python(小脚本)

2024-06-28

我有一个在 Linux 环境中使用的 bash 脚本,但现在我必须在 Windows 平台上使用它,并且希望将 bash 脚本转换为可以运行的 python 脚本。

bash 脚本相当简单(我认为),我尝试通过 google 转换它,但无法成功转换。

bash 脚本如下所示:

runs=5

queries=50

outfile=outputfile.txt

date  >> $outfile


echo -e "\n---------------------------------"
echo -e "\n----------- Normal --------------"
echo -e "\n---------------------------------"
echo -e "\n----------- Normal --------------" >> $outfile
for ((r = 1; r < ($runs + 1); r++))
do
    echo -e "Run $r of $runs\n"

    db2 FLUSH PACKAGE CACHE DYNAMIC

    python reads.py -r1 -pquery1.sql -q$queries -shotelspec -k6 -a5 >> $outfile
done

主命令 python read.py ... 等是我得到的另一个 python 文件,并且具有如您所见的参数。

我知道这是一个很大的要求,但如果有人可以将其转换为我可以使用的 python 脚本,或者至少给我一些提示和方向,那真的会帮助我。

真挚地

Mestika

根据请求添加:

这是我写的但没有成功:

runs=5
queries=50
outfile=ReadsAgain.txt
file = open("results.txt", "ab")

print "\n---------------------------------"
print "\n----------- Normal --------------"
print "\n---------------------------------"
file.write("\n----------- Normal --------------\n")
print "\n------------- Query without Index --------------"
file.write("\n------------- Query without Index --------------\n")
for r = 1; r < (%s + 1); r++ % runs
    print "Run %s of %s \n" % r % runs

    db2 FLUSH PACKAGE CACHE DYNAMIC

    output = python reads.py -r1 -pquery1.sql -q$queries -shotelspec -k6 -a5
    file.write(output)

file.close()

Answer

让我们把它分解成碎片。尤其是那些你做错的部分。 :)


任务

outfile=ReadsAgain.txt

毫不奇怪,您需要在字符串周围加上引号。另一方面,你可以在周围放置空间。=为了可读性。

outfilename = "ReadsAgain.txt"

变量扩展 →str.format http://docs.python.org/library/stdtypes.html#str.format(或者% http://docs.python.org/library/stdtypes.html#string-formatting-operations手术)

python reads.py <snip/> -q$queries <snip/>

现在您已经知道如何进行重定向了,但是如何进行变量扩展呢?您可以使用the format method http://docs.python.org/library/stdtypes.html#str.format(v2.6+):

command = "python reads.py -r1 -pquery1.sql -q{0} -shotelspec -k6 -a5".format(queries)

您也可以使用the %操作员 http://docs.python.org/library/stdtypes.html#string-formatting-operations:

#since queries is a number, use %d as a placeholder
command = "python reads.py -r1 -pquery1.sql -q%d -shotelspec -k6 -a5" % queries

C 型循环 →面向对象风格的循环 http://docs.python.org/tutorial/controlflow.html#for-statements

for ((r = 1; r < ($runs + 1); r++)) do done

Python 中的循环与 C 风格的迭代不同。 Python 中发生的情况是迭代可迭代对象,例如列表。在这里,你正在尝试做某事runs次,所以你会这样做:

for r in range(runs):
  #loop body here

range(runs)相当于[0,1,...,runs-1], 的列表runs = 5整数元素。所以你会重复身体runs次。在每个周期,r被分配列表的下一项。因此,这与您在 Bash 中所做的完全等同。

如果您感觉大胆,请使用xrange http://docs.python.org/library/functions.html#xrange反而。它完全等价,但使用更高级的语言功能(因此更难用外行术语解释),但消耗的资源更少。


输出重定向 →the subprocess module http://docs.python.org/library/subprocess.html?highlight=subprocess#using-the-subprocess-module

如果您愿意的话,“更难”的部分是:执行程序并获取其输出。谷歌来救援! http://www.google.com/search?q=how+to+get+the+output+of+a+program+python显然,最热门的是一个 stackoverflow 问题:this one https://stackoverflow.com/questions/748028/how-to-get-output-of-exe-in-python-script。您可以使用一个简单的函数隐藏其背后的所有复杂性:

import subprocess, shlex
def get_output_of(command):
  args = shlex.split(command)
  return subprocess.Popen(args,
                          stdout=subprocess.PIPE).communicate()[0]
  # this only returns stdout

So:

python reads.py -r1 -pquery1.sql -q$queries -shotelspec -k6 -a5 >> $outfile

becomes:

command = "python reads.py -r1 -pquery1.sql -q%s -shotelspec -k6 -a5" % queries
read_result = get_output_of(command)

不要过度-subprocess, 包括电池

或者,考虑一下您可以获得几乎相同的输出date具有以下内容:

import time
time_now = time.strftime("%c", time.localtime()) # Sat May 15 15:42:47 2010

(请注意缺少时区信息。这应该是另一个问题 https://stackoverflow.com/questions/ask,如果这对您很重要。)


你的程序应该是什么样子

最终结果应如下所示:

import subprocess, shlex, time
def get_output_of(command):
  #... body of get_output_of
#... more functions ...
if __name__ = "__main__":
  #only execute the following if you are calling this .py file directly,
  #and not, say, importing it
  #... initialization ...
  with file("outputfile.txt", "a") as output_file: #alternative way to open files, v2.5+
    #... write date and other stuff ...
    for r in range(runs):
      #... loop body here ...

后经文

与相对简单且简短的 Bash 脚本相比,这看起来一定非常可怕,对吧? Python 不是一种专门的语言:它的目标是把所有事情都做得相当好,但并不是直接为运行程序和获取程序的输出而构建的。

尽管如此,你还是不会normally用 Bash 写一个数据库引擎,对吧?不同的工作有不同的工具。在这里,除非您计划进行一些使用该语言编写的不简单的更改,否则 [Ba]sh 绝对是正确的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 bash 脚本转换为 python(小脚本) 的相关文章

  • async for 的语义等价物

    从相对于的文档async for根据 Python 3 5 中的语法 我发现引入它是为了迭代可等待的迭代器 不过 在描述之后的语义等价物中 我没有得到一些东西 iter ITER iter type iter aiter iter runn
  • pycharm自动将制表符转换为空格

    我正在使用 pycharm IDE 进行 python 开发 它对于 django 代码来说工作得很好 因此怀疑将制表符转换为空格是默认行为 但是在 python IDE 中到处都会出现错误 因为它无法自动将制表符转换为空格 有没有办法实现
  • sed 用变量替换[重复]

    这个问题在这里已经有答案了 我想替换一行内容alpha pi 具有给定角度的正确计算值 以弧度为单位 即变量 n1 bin bash read p Angle in degrees n1 Convert angle to radians p
  • Keras 的 ImageDataGenerator 是否随机对每个图像应用转换?

    我正在使用 Keras ImageDataGenerator 类训练 CNN 我的代码看起来像这样 from keras callbacks import LearningRateScheduler from keras callbacks
  • 如何使用 scipy.spatial.Delaunay 查找 delaunay 三角剖分中给定点的所有邻居?

    我一直在寻找这个问题的答案 但找不到任何有用的东西 我正在使用 python 科学计算堆栈 scipy numpy matplotlib 并且我有一组二维点 我为其计算 Delaunay 训练 wiki https en wikipedia
  • pandas read_csv() 方法支持 zip 存档读取,但 to_csv() 方法不支持 zip 存档保存

    Pandas 0 18 支持 read csv zip 文件作为参数 并将压缩的 csv 表正确读取到数据框中 但是当我尝试使用 to csv 方法将数据帧保存为压缩 csv 时 我收到错误 根据官方文档 to csv 方法不支持zip格式
  • 执行时忽略字符串列

    我使用以下代码来标准化 pandas DataFrame df norm df df mean df max df min 当所有列都是数字时 此方法效果很好 但是 现在我有一些字符串列df并且上述标准化有错误 有没有办法只对数据帧的数字列
  • 使用 PyQt5/Pyside2 设置重复的 SVG 图案作为主窗口/Qwidget 背景

    我已经通过生成了 SVG css 代码http www heropatterns com http www heropatterns com 我正在尝试使用它作为我的主窗口 Qwidget 的背景 我希望背景随着窗口变大或缩小而调整大小 我
  • 使用 ctypes 的 python 枚举模块

    之前enum模块已存在 c int或相关类型经常被用作替代枚举 但这没有也没有检查类型 现在 python 有一个enum模块 有没有办法直接使用它ctypes 是的 我们可以轻松创建自己的 CEnum 类 这要归功于 ctypes 允许我
  • Python字典键(类对象)与多个比较器的比较

    我使用自定义对象作为 python 字典中的键 这些对象有一些默认值hash and eq定义的方法用于默认比较 但在某些功能中我需要使用不同的方式来比较这些对象 那么有什么方法可以覆盖或传递一个新的比较器来仅针对该特定函数进行这些关键比较
  • 为什么 scipy.signal.correlate2d 在此示例中无法工作?

    我试图对两个图像进行交叉关联 从而通过找到最大相关值来将模板图像定位在第一张图像上 我画了一个带有一些随机形状的图像 第一张图像 并剪出了其中一个形状 模板 现在 当我使用 scipy 的 correlate2d 并在具有最大值的相关性中定
  • matplotlib中有制作散点图矩阵的函数吗?

    散点图矩阵示例 matplotlib pyplot中有这样的函数吗 对于那些不想定义自己的函数的人来说 Python 中有一个很棒的数据分析库 称为Pandas http pandas pydata org 在那里可以找到分散矩阵 http
  • find -regex 比 find | 慢grep

    我有一个使用正则表达式查找文件的脚本 代码如下 find dir grep regex 该脚本运行有点太慢 我想优化它 搜索需要一些时间来执行 我希望从中获得更好的性能 我尝试过这个尝试 find dir regex regex 我预计结果
  • 从 C# 运行多个 python 脚本

    我希望有人能够在这里帮助我 我对 C 比较陌生 正在尝试执行我在 C winform 应用程序中编写的一些 Python 代码 我想做的是从 winform 中的文本框中输入名称 并让它通过 python 脚本进行处理 并在 winform
  • 有没有办法向后遍历 dask 数据帧?

    我想要read parquet但从开始的地方向后阅读 假设索引已排序 我不想将整个镶木地板读入内存 因为这违背了使用它的全部意义 有什么好的方法可以做到这一点吗 假设数据帧已建立索引 索引的反转可以通过两步过程完成 反转分区的顺序并反转每个
  • 如何在Windows上安装PyGI(Python Gobject Introspection)?

    安装Python解释器 http python org ftp python 2 7 2 python 2 7 2 msi http python org ftp python 2 7 2 python 2 7 2 msi and http
  • 查找框和裁剪图像的角点

    Hey Guys I am working with numpy and opencv and want to get a image cropped by the contours of it Here is one example wh
  • 使用脚本取消设置 PDF 字体

    我正在使用 xhtml2pdf 库自动创建 PDF 几个月前我有过这个问题 https stackoverflow com questions 25203219 xhtml2pdf doesnt embed helvetica 库嵌入了我没
  • 传递到 Flask 的可能路线列表?

    我正在学习 Flask 有一个关于动态路由的问题 是否可以传入接受的路由列表 我注意到any转换器具有潜力 但很难找到使用中的示例 基本上我有不同的端点组 它们应该在它们之间触发相同的操作 这就是我的意思 cities New York L
  • 如何使用判别函数绘制 3 个类别之间的决策边界

    我有 3 个判别函数 将 2D 空间划分为 3 个区域 我想绘制这些区域之间的决策边界 我不知道如何在 python 中使用 matplotlib meshgrid 来做到这一点 对于2个判别函数 过程很简单 我计算值为 0 的函数和等高线

随机推荐

  • 当我在 keyDown 事件处理程序中使用它时,按下 ESC 时,location.reload 不会重新加载页面。仅限FF

    我发现当按下 ESC 按钮时从 keyDown 事件处理程序调用 location reload 调用时 它不会执行任何操作 有人知道如何重新加载页面的解决方法吗 我还发现http bugs jqueryui com ticket 4922
  • 在 Interface Builder 中设置 UIImageView 的图像

    当我在 IB 中为 UIImageView 设置图像并模拟界面时 按钮和内容会显示 但图像视图不会显示 这是因为 Interface Builder 使用的模拟器独立于您的项目 它只是获取 xib 文件 构建界面并显示它 因此 它找到引用但
  • 不使用 JS 防止图像可拖动或可选择

    有谁知道如何在 Firefox 中同时使图像不可拖动且不可选择 而不需要求助于 Javascript 看似微不足道 但问题是 可以在 Firefox 中拖动并突出显示 所以我们添加了这个 但是拖动时图像仍然可以突出显示 所以我们添加这个来解
  • 如何在 .map 函数中访问张量形状?

    我有多个长度的音频数据集 我想在 5 秒窗口内裁剪所有音频 这意味着 240000 个元素 采样率为 48000 因此 加载 tfrecord 后 我正在执行以下操作 audio sr tf audio decode wav image d
  • 测试 JavaScript 中是否有未定义的内容

    我正在查if response 0 title undefined 但我收到错误 未捕获的类型错误 无法读取未定义的属性 标题 response 0 未定义 检查是否已定义 然后检查其属性标题 if typeof response 0 un
  • Kotlin 不理解 ViewModelProviders.of(activity ?:fragment)

    在我的里面Fragment我初始化一个ViewModel using ViewModelProviders 我想让它采取它的Activity if not null 否则本身 Fragment private val viewModel M
  • 报告已完成的冲刺

    想要构建一份报告 显示每个团队成员在每个已完成的 Sprint 中的贡献百分比 我们将工作分解为 任务 并分配 剩余工作 值来指示所需的时间 那么问题是 随着冲刺的进行 剩余价值是明确的或减少的 一直在寻找一种方法来找到原始剩余价值 这样我
  • IntelliJ、Akka 和配置文件

    使用时akka http akka io 我放置akka conf in src main resources 当我run通过 sbt akka conf被正确识别 但当我运行 IntelliJ 时却没有 即使在gen idea 实现这一目
  • 围绕 glutMainLoop 执行程序的其余部分?

    我目前正在开发一个项目 其中有一个 android 应用程序 我在 PC 上的 OpenGL 窗口中编写了控件和对象 我已经让 OpenGL 窗口执行我想要的操作 并且我从 Android 设备获取了数据以流式传输到终端 但是我需要将数据传
  • 如何知道我正在使用 ndk-build 构建哪个 API 级别?

    我试图更好地理解使用 ndk build 时 api 级别的选择是如何工作的 我知道我可以明确设置APP PLATFORM in 应用程序 mk 否则 ndk build 将针对清单中指示的 apiandroid minSdkVersion
  • 尝试计算盒子的分数时小数精度损失

    我有一个场景 我有一个包含 3 个罐头的标准盒子 出于显示和查询的目的 我必须以其标准配置的十进制数量进行报告 不可能说1盒3罐 1盒2罐 等等 例如 最初我会有1盒3罐然后我移除 1 个罐子 结果是0 66 循环盒 3 罐然后我再移除 1
  • 在会话中检索并保存 gridview

    当我在文本框中写入我的名字时 我有一个用于搜索的页面 例如 它将搜索并在 GridView 中显示结果 我正在使用一个EntityDataSource with a QueryExtender所以我没有用C 编写任何代码 问题是 在 Gri
  • 使用 toYaml 进行 helm 模板化

    我有values yml 文件 它接受具有以下格式和默认值的端口列表 Ports number 443 protocol http 输出用作输入的端口列表的脚本给出了以下格式 port list get ports sh output 80
  • 在我自己的自定义 appSettings 上使用 foreach 所需的代码

    我搜索了该网站 但没有找到我想要的内容 接近 但没有雪茄 基本上我想要一个像这样的配置部分
  • 有没有文档描述 Clang 如何处理过多的浮点精度?

    当唯一允许使用的浮点指令是 387 指令时 几乎不可能 以合理的成本提供严格的 IEEE 754 语义 当人们希望让 FPU 工作在完整的 64 位有效数上时 这尤其困难 以便long double类型可用于扩展精度 通常的 解决方案 是以
  • 我可以通过 ssh 将 ssh 用户名与 git 的提交关联起来吗?

    我正在尝试通过 ssh 设置共享 git 存储库 将用户公钥复制到authorized keys 我真的希望 ssh key 中的 用户名 成为存储库中提交历史记录的一部分 这样用户 joe 就不能将他的名字设置为 kate 我们需要某种责
  • 如何清除Android应用程序中的所有活动

    我的应用程序有许多可以按任何顺序调用的活动 活动历史示例 A gt B gt C gt D gt A gt B gt E 现在在活动 E 中 我正在 注销 设备 注销用户 并删除他们可能已下载到 SD 卡的任何数据 期望的行为是应用程序 重
  • 使用 C 与 OpenMP 求和

    我已经尝试并行化这段代码大约两天了 但一直出现逻辑错误 该程序是使用非常小的 dx 之和来求积分的面积 并计算积分的每个离散值 我正在尝试使用 openmp 来实现这一点 但实际上我没有使用 openmp 的经验 我需要你的帮助 实际目标是
  • javascript - 全局变量不起作用

    我想保存一个变量 以便多个函数可以使用它 我按照 w3schools 的指示进行操作 但不起作用 我是不是忘记了什么 先感谢您 var name document getElementById name value function com
  • 将 bash 脚本转换为 python(小脚本)

    我有一个在 Linux 环境中使用的 bash 脚本 但现在我必须在 Windows 平台上使用它 并且希望将 bash 脚本转换为可以运行的 python 脚本 bash 脚本相当简单 我认为 我尝试通过 google 转换它 但无法成功