0

サブプロセスを使用して、bash スクリプトを Python に埋め込むことができました。今日、たまたまPythonコードをナビゲートしたところ、以下のコード行に出くわしました.これは、bashスクリプトをPythonに埋め込んでいますdocstring.

#!/bin/bash -

''''echo -n
if [[ $0 == "file" ]]; then
  ..
fi
'''

誰かがこのアプローチに光を当てることができますか? このアプローチは何と呼ばれ、おそらく関連する利点です。シンプルさは明らかですが、これにはそれ以上のものがあると思います。

4

2 に答える 2

3

これは、ファイルを有効なPythonスクリプトと有効なbashスクリプトの両方にするためのやや賢い方法です。サブプロセスが魔法のように生成されることはないことに注意してください。むしろ、ファイルがbashによって評価される場合、bashスクリプトが実行され、Pythonによって評価される場合、bashスクリプトは無視されます。

それは賢いですが、おそらく一般的には良いソフトウェアエンジニアリングの実践ではありません。通常、個別のスクリプトを使用する方が理にかなっています。

より具体的な例を挙げます(このファイルは「polyglot」と呼ばれます)。

''''echo hello from bash
exit
'''

print('hello from python')

お気づきのとおり、bashは最初の引用符を無視し、「hello from bash」と出力してから、三重引用符に到達する前に終了します。また、Pythonはbashスクリプトを文字列として扱い、それを無視して、以下のPythonスクリプトを実行します。

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

しかし当然のことながら、これは通常(そしてより明確に)2つのスクリプトにリファクタリングできます。1つは各言語です。

于 2013-03-03T20:01:42.973 に答える
2
  1. いいえ、それはPythonに埋め込まれていません。シバンはそれがbashスクリプトだと言っています
  2. これは単なる空の文字列で''''あり''、何の効果もありません。
  3. '''最後'が閉じられていないため、これは無効です。
于 2013-03-03T19:52:38.340 に答える