Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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,我已经能够使用它将bash脚本嵌入到python中。我今天碰巧浏览了一段python代码,无意中发现了下面这行代码,它也将bash脚本嵌入到python中——使用类似于docstring的构造 #!/bin/bash - ''''echo -n if [[ $0 == "file" ]]; then .. fi ''' 有人能解释一下这种方法吗。这种方法叫什么,可能还有相关的好处。我很明显看到了简单性,但我认为这比那更重要 不,这并没有嵌入到python中,shebang说这是一个bas

我已经能够使用它将bash脚本嵌入到python中。我今天碰巧浏览了一段python代码,无意中发现了下面这行代码,它也将bash脚本嵌入到python中——使用类似于
docstring
的构造

#!/bin/bash -

''''echo -n
if [[ $0 == "file" ]]; then
  ..
fi
'''
有人能解释一下这种方法吗。这种方法叫什么,可能还有相关的好处。我很明显看到了简单性,但我认为这比那更重要

  • 不,这并没有嵌入到python中,shebang说这是一个bash脚本
  • ''
    ''
    两次,这只是一个空字符串,没有任何效果
  • '
    无效,因为最后一个
    '
    未关闭
  • 不,这并没有嵌入到python中,shebang说这是一个bash脚本
  • ''
    ''
    两次,这只是一个空字符串,没有任何效果
  • '
    无效,因为最后一个
    '
    未关闭

  • 这是一种使文件同时成为有效Python脚本和有效bash脚本的聪明方法。请注意,它不会导致子流程神奇地生成。相反,如果文件是由bash计算的,那么bash脚本将运行,如果文件是由Python计算的,那么bash脚本将被忽略

    这很聪明,但一般来说可能不是一个好的软件工程实践。使用单独的脚本通常更有意义

    举一个更具体的例子(假设此文件名为“”):

    正如您所注意到的,bash将忽略初始引号,并打印“hello from bash”,然后在到达三重引号之前退出。Python将把bash脚本视为字符串,并忽略它,运行下面的Python脚本

    $ python polyglot
    hello from python
    $ bash polyglot
    hello from bash
    

    但是,很自然,这通常(更清楚地说)可以重构为两个脚本,每种语言一个。

    这是一种聪明的方法,可以使文件同时成为有效的Python脚本和有效的bash脚本。请注意,它不会导致子流程神奇地生成。相反,如果文件是由bash计算的,那么bash脚本将运行,如果文件是由Python计算的,那么bash脚本将被忽略

    这很聪明,但一般来说可能不是一个好的软件工程实践。使用单独的脚本通常更有意义

    举一个更具体的例子(假设此文件名为“”):

    正如您所注意到的,bash将忽略初始引号,并打印“hello from bash”,然后在到达三重引号之前退出。Python将把bash脚本视为字符串,并忽略它,运行下面的Python脚本

    $ python polyglot
    hello from python
    $ bash polyglot
    hello from bash
    

    但很自然,这通常(更清楚地说)可以重构为两个脚本,每种语言一个。

    实际上,“”被解析为打开一个docstring,后跟一个文本单引号。是的,但关键是Python可以忽略bash脚本。Python解析是有趣的一点。我知道,但在当前的形式下,这个bash脚本的语法无效-
    在寻找匹配的“''
    OP”时意外的EOF只是省略了之前的“exit”语句,这在这个模式中很常见。实际上,''被解析为打开一个docstring,后面是一个单引号。是的,但关键是Python可以忽略bash脚本。Python解析是有趣的一点。我知道,但在当前的形式下,这个bash脚本的语法无效-
    在寻找匹配的`'
    OP时,意外的EOF只是省略了前面的“exit”语句,这在这个模式中很常见。