0

Debian 6(Python 2.6.6)でapt-getを使用して、wget、gitなどのいくつかのパッケージのインストールを自動化するPythonの小さなスクリプトがあります。スクリプトは次に をインストールしpip、次に を使用してrequestsphpserializepipをインストールします。スクリプトを実行したときに得られる出力は次のとおりです。

root@ffVMdeb64:~# python test.py 
Reading package lists... Done
mkdir: cannot create directory `/usr/local/src/forpip': File exists
Building dependency tree       
Reading state information... Done
git is already the newest version.
wget is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... 50%


Building dependency tree       
Reading state information... Done
Requirement already satisfied (use --upgrade to upgrade): phpserialize in /usr/local/lib/python2.6/dist-packages
Cleaning up...
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.6/dist-packages
Cleaning up...
git is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

最後に、スクリプトはユーザーから何らかの入力を受け取ります。ただし、raw_inputステートメントはインストール プロセスの出力がまだ進行中に実行されるため、上書きされます。上記の出力の 2 つのブロック間の空白スペースに注意してください。これは、raw_inputステートメントが印刷されてから上書きされる場所です。

スクリプトの関連部分は次のとおりです。

subprocess.call("pip install phpserialize &> /dev/null 2>&1", shell=True)
subprocess.call("pip install requests &> /dev/null  2>&1", shell=True)
subprocess.call("apt-get install git -y &> /dev/null 2>&1", shell=True)
import phpserialize
import requests
from phpserialize import serialize
from phpserialize import unserialize

def checktext():
    text = raw_input("\n\n\nEnter your text:")
    return text

itext = checktext()

CentOS 6.3 と 6.4 でまったく同じスクリプトをテストしたところ、期待どおりに動作しました。Building dependency tree... 50%の部分と何か関係があると思いますが、apt-getよくわかりません。

どうすればこれを修正できますか?

4

1 に答える 1

0

これは正確な解決策ではない可能性があり、より良い解決策があると確信していますが、sleep最後のapt-getステートメントの後に試してみるとうまくいくと思います.

あなたのコードに従って:

import time
subprocess.call("pip install phpserialize &> /dev/null 2>&1", shell=True)
subprocess.call("pip install requests &> /dev/null  2>&1", shell=True)
subprocess.call("apt-get install git -y &> /dev/null 2>&1", shell=True)
time.sleep(5)
import phpserialize
import requests
from phpserialize import serialize
from phpserialize import unserialize

def checktext():
    text = raw_input("\n\n\nEnter your text:")
    return text

itext = checktext()

これにより、全体apt-getが最初に実行され、次にtext=...ステートメントに移動します。

お役に立てれば

于 2013-09-11T09:59:16.123 に答える