Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python编译中包含bash脚本_Python_Bash - Fatal编程技术网

在python编译中包含bash脚本

在python编译中包含bash脚本,python,bash,Python,Bash,我在Python程序中使用了几个bash脚本。当前的解决方案是浏览GUI中的文件,然后像这样运行脚本(pathToScript是脚本路径的字符串): INPUT=[pathToScript,input1,input2,input3,input4,input5,input6,input7,input8,input9,input10] 子流程调用(输入) 为了避免总是浏览脚本或硬编码路径,我正在寻找一种解决方案,以某种方式将bash脚本包含在已编译的Python程序中,然后在程序中运行它。这可能吗

我在Python程序中使用了几个bash脚本。当前的解决方案是浏览GUI中的文件,然后像这样运行脚本(
pathToScript
是脚本路径的字符串):

INPUT=[pathToScript,input1,input2,input3,input4,input5,input6,input7,input8,input9,input10]
子流程调用(输入)

为了避免总是浏览脚本或硬编码路径,我正在寻找一种解决方案,以某种方式将bash脚本包含在已编译的Python程序中,然后在程序中运行它。这可能吗?如果可以避免的话,我不想将bash脚本重写为Python。

您可以将每个bash脚本的实际文本放入一个多行字符串变量中,然后编写 每一个都会被输出到一个文件中。您将知道在哪里写入文件,因此可以调用脚本


确保您设置了脚本的执行权限,或者明确地将bash的路径作为
输入的第一项插入

始终可以将bash脚本与程序的其余部分捆绑在一起(我怀疑您已经这样做了),并在运行时重建这些脚本的路径

从模块本身中获取任何python模块的位置,然后从中创建bash脚本的路径非常容易:

import os.path

LOCATION = os.path.dirname(os.path.abspath(__file__))
pathToScript = os.path.join(LOCATION, 'bashscript.sh')

然后,
pathToScript
将是文件
bashscript.sh
的绝对路径,该文件与当前Python模块位于同一目录中。

我认为,在某个时候,如果要执行bash脚本,必须调用bash。但是,您也可以使用
bash-c“echo'this works'”
,按照OP@Anthon:否,这解决了OP面临的问题。这里不需要将bash程序存储在字符串中。涉及到多个bash脚本,它们已经包含在程序中,唯一的问题是在安装程序时找到它们的路径。这个答案解决了这个问题。你的答案是问题的可能解决方案,但不是他提出的问题的答案。可以在编译的Python程序中包含bash脚本。@Anthon:不,OP正在寻找一个问题的解决方案,并且提到了他们所想到的一种模糊的方法。这并不意味着文字实现是这个问题的最佳解决方案。谢谢,这是一个简洁的解决方案。是的,我在四处寻找解决办法。当然,将文本放入字符串变量是可能的,但是出于测试和编辑的目的,我认为这个解决方案更好。这是一种“技术上还可以”,但很繁重的方法。当他想要添加脚本时会发生什么?移除一些?设置脚本的当前目录的路径仍然是硬编码,但与使用复制/粘贴bash脚本加载Python变量相比,它更轻量级,更易于维护。@tristan:我不确定这是否是一种繁重的操作。OP显然希望将所有内容都放在一个地方:python脚本。这使其易于部署,例如,如果要填充多个服务器。当然,还有其他解决方案。我不会说那是粗暴的。编写脚本将按需完成,您可以通过在列表中保留新脚本的字符串变量(这也决定了执行顺序)来保留旧脚本。