-1
我有8個腳本。我希望把他們都到一個單一的腳本,問題是他們寫在不同的語言:腳本的組合:Python中的單個腳本中的Python,PHP,Ruby和Perl
- PHP
- 紅寶石
- 的Perl
- 的Python
但最後一個應該在Python中。
我想要做到這一點,而不需要用Python重寫所有這些。
有沒有辦法做到這一點?
腳本接受輸入.txt
文件作爲命令行參數,並生成輸出.txt
文件。
我有8個腳本。我希望把他們都到一個單一的腳本,問題是他們寫在不同的語言:腳本的組合:Python中的單個腳本中的Python,PHP,Ruby和Perl
但最後一個應該在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";
在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
您可能想將命令封裝到shell腳本中。例如,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
命令向標準錯誤描述符打印一個字符串。有了shell封裝器,你可以在Python中調用一個子進程:
try:
output = check_output(['./call-scripts.sh', input_file])
print output
except CalledProcessError as e:
print >> sys.stderr, "Execution failed: ", e
你試過編寫一個shell腳本嗎? –
我知道關於sh的一些信息,但我如何嘗試使用shell腳本? – robert
這取決於。例如,在GNU/Linux平臺上,最好的shell之一是[Bash](https://www.gnu.org/software/bash/)。在最簡單的情況下,shell腳本看起來就像是一個命令列表。如果你想從Python腳本調用腳本,那麼你應該使用['subprocess'](https://docs.python.org/2/library/subprocess.html)。 –