2016-10-01 6 views
-1

私は8つのスクリプトを持っています。私は、単一のスクリプトにそれらすべてを入れたい、との問題は、それらが異なる言語で書かれているということです。スクリプトの組み合わせ:Python、PHP、Ruby、PerlをPythonの単一スクリプトで実装

  • PHP
  • ルビー
  • は、Perl
  • のPython

しかし、最終的なものはPythonでなければなりません。

私はこれを、Pythonですべて書き直す必要なしにしたいと思います。

これを行う方法はありますか?

スクリプトは、コマンド入力引数として入力.txtファイルを受け入れ、出力.txtファイルを生成します。で

script.php

<?php 
$input_file = $argv[1] ?? 'default-input-file'; 
echo $input_file, PHP_EOL; 

script.pl

#!/usr/bin/perl 

use strict; 
use warnings; 

my $input_file = $ARGV[0] // 'default-input-file'; 
print "$input_file\n"; 

+0

シェルスクリプトを作成しようとしましたか? –

+0

私はshについて知っていますが、どのようにシェルスクリプトを使用しようとしましたか? – robert

+0

です。たとえば、GNU/Linuxプラットフォームでは、ベストシェルの1つが[Bash](https://www.gnu.org/software/bash/)です。最も単純なケースでは、シェルスクリプトはコマンドのリストのように見えます。 Pythonスクリプトからスクリプトを呼び出す場合は、おそらく['subprocess'](https://docs.python.org/2/library/subprocess.html)を使うべきです。 –

答えて

2

たちは、それぞれ最初の引数としてファイルパスをスクリプトのカップルを受け入れたとしPythonの場合は、subprocess.check_output

で呼び出すことができます
#/usr/bin/env python2 
import os.path 
import sys 
from subprocess import check_output, STDOUT, CalledProcessError 

if len(sys.argv) < 2: 
    sys.stderr.write("Usage: %s input-file" % sys.argv[0]) 
    sys.exit(1) 

input_file = sys.argv[1] 

if not os.path.isfile(input_file): 
    sys.stderr.write("%s is not a file" % input_file) 
    sys.exit(1) 

try: 
    output = check_output(['php', './script.php', input_file], stderr=STDOUT) 
    print "PHP: %s" % output 

    output = check_output(['perl', './script.pl', input_file], stderr=STDOUT) 
    print "Perl: %s" % output 
except CalledProcessError as e: 
    print >> sys.stderr, "Execution failed: ", e 

シェルスクリプトにコマンドをラップすることができます。例えば、Bashスクリプトは次のようになります。

#!/bin/bash - 

if ! php ./script.php "[email protected]" ; then 
    echo >&2 "php command failed" 
fi 

if ! perl ./script.pl "[email protected]" ; then 
    echo >&2 "perl command failed" 
fi 

[email protected]変数は、スクリプトに渡されたすべてのコマンドライン引数を表します。 ifステートメントは、コマンドが正常に終了したかどうかを確認します。 echo >&2コマンドは、標準エラー記述子に文字列を出力します。シェルラッパーを使用すると、Pythonで単一のサブプロセスを呼び出すことができます。

try: 
    output = check_output(['./call-scripts.sh', input_file]) 
    print output 
except CalledProcessError as e: 
    print >> sys.stderr, "Execution failed: ", e 
関連する問題