7

配列を返す関数を含むPythonモジュールを作成しました。Pythonモジュールから返された文字列配列にアクセスし、bashスクリプトで反復処理できるようにしたいので、配列要素を反復処理できます。

例えば:

Pythonモジュール(mymod)

def foo():
    return ('String', 'Tuple', 'From', 'Python' )

def foo1(numargs):
    return [x for x in range(numargs)]

Bashスクリプト

foo_array  = .... # obtain array from mymod.foo()
for i in "${foo_array[@]}"
do
    echo $i
done


foo1_array = .... # obtain array from mymod.foo1(pass arg count from bash)
for j in "${foo1_array[@]}"
do
    echo $j
done

どうすればこれをbashに実装できますか?

バージョン情報:

Python 2.6.5 bash:4.1.5

4

5 に答える 5

13

2回目の試行-今回はシェルが統合の矢面に立たされます。

これを含むfoo.pyを指定します。

def foo():
        foo = ('String', 'Tuple', 'From', 'Python' )
        return foo

次に、bashスクリプトを次のように記述します。

#!/bin/bash
FOO=`python -c 'from foo import *; print " ".join(foo())'`
for x in $FOO:
do
        echo "This is foo.sh: $x"
done

残りは、Pythonの終わりから統合を推進する最初の答えです。

Python

import os
import subprocess

foo = ('String', 'Tuple', 'From', 'Python' )

os.putenv('FOO', ' '.join(foo))

subprocess.call('./foo.sh')

bash

#!/bin/bash
for x in $FOO
do
        echo "This is foo.sh: $x"
done
于 2012-07-09T09:21:08.627 に答える
1

In addition, you can tell python process to read STDIN with "-" as in

echo "print 'test'" | python -

Now you can define multiline snippets of python code and pass them into subshell

FOO=$( python - <<PYTHON

def foo():
    return ('String', 'Tuple', 'From', 'Python')

print ' '.join(foo())

PYTHON
)

for x in $FOO
do
    echo "$x"
done

You can also use env and set to list/pass environment and local variables from bash to python (into ".." strings).

于 2013-03-04T00:14:37.860 に答える
0

オブジェクトのシリアル化のようなものの代わりに、おそらく1つの方法は、コンマで区切られた値のリストを出力し、それらをコマンドラインからパイプすることです。

次に、次のようなことを行うことができます。

> python script.py | sh shellscript.sh
于 2012-07-09T09:30:57.390 に答える
0

これも役立ちます。script.py:

 a = ['String','Tuple','From','Python']

    for i in range(len(a)):

            print(a[i])

次に、次のbashスクリプトpyth.shを作成します。

#!/bin/bash

python script.py > tempfile.txt
readarray a < tempfile.txt
rm tempfile.txt

for j in "${a[@]}"
do 
      echo $j
done

sh pyth.sh

于 2018-08-03T20:21:13.813 に答える
0

pythonから出力を取得するMariaのメソッドと同様に、argparseライブラリを使用して、bashからpythonスクリプトに変数を入力できます。ここにpython3のチュートリアルとその他のドキュメントがあり、ここにpython2があります。

Pythonスクリプトの例command_line.py

import argparse
import numpy as np

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    parser.add_argument('x', type=int)

    parser.add_argument('array')

    args = parser.parse_args()

    print(type(args.x))
    print(type(args.array))
    print(2 * args.x)

    str_array = args.array.split(',')
    print(args.x * np.array(str_array, dtype=int))

次に、端末から:

$ python3 command_line.py 2 0,1,2,3,4
# Output
<class 'int'>
<class 'str'>
4
[0 2 4 6 8]
于 2019-05-03T20:00:13.303 に答える