バージョン2.6または2.7で動作するスクリプトを作成しました。私は別のバージョンがインストールされているかどうかを確認し、互換性のあるバージョンがあるかどうかを確認するための安全性チェックを行いました。ここに私のコードスニペットがあります。なぜPython 2.4は終了関数を無視し続けますか?
# !/usr/bin/python
import sys, os, re
from sys import exit
if sys.version[0:3] in ['2.6', '2.7']:
import subprocess, datetime, os.path, json, urllib2, socket
def python_version():
version = sys.version[0:3]
while version not in ['2.6', '2.7']:
print '\n\nYou\'re using an incompatible version of Python (%s)' % version
python_installed_version = []
for files in os.listdir("/usr/bin/"): # check to see version of python already on the box
python_version = re.search("(python2(.+?)[6-7]$)", files)
if python_version:
python_installed_version.append(python_version.group())
if python_installed_version:
print 'Fortunately there are compatible version(s) installed. Try the following command(s): \n\n',
for version in python_installed_version:
print 'curl http://script.py | %s\n' % version
sys.exit()
python_version()
with p.stdout:
print 'hello'
上記のPython 2.4を実行すると、このエラーが発生します。
File "<stdin>", line 46
with p.stdout:
^
SyntaxError: invalid syntax
それはあなたがsys.exit()
でのpython 2.4を使用していることを検出し、その代わりに、スクリプトを読んで運び、with p.stout:
がどこにあるか、上記のエラーを与えるようスクリプトは、すぐに終了していない理由を私は理解していません読む。
私はwith p.stdout:
行を削除しました。正常に動作し、print 'hello'
は読み取れません。私はなぜwith p.stdout:
がスクリプトを中断させているのか分かりません。これは2.6と2.7で完璧に動作します。
なぜPython 2.4がまだwith p.stdout:
行を読むのかについてのアイデアはありますか?ありがとう。
チェックファイルと実際のスクリプトファイルの2つのファイルを使用する必要はありませんか?私はクライアントのボックスでこのスクリプトを実行し、カールを使用するつもりですが、本当に2つのファイルをダウンロードしてスクリプトを実行する必要はありません:( – user1165419
@ user1165419 'with'を使わないようにコードを書き直すことができます。結局のところ、構文の砂糖だけです。あなたのリソースを手動で開いたり閉じることができます(ちょっとだけ覚えておいてください) – viraptor
私はスクリプトオプションをインポートするのが好きです。 'curl http://main_script.py | python'。インターネット経由でスクリプトをインポートすることはできますか?つまり、' curl check_version_script.py'を実行し、 'actual_app'を読み込む代わりに'import http:// main_script.py'のようにインターネット上でファイルをダウンロードする必要はありませんか?これは私の問題を解決する可能性があります – user1165419