0

Linuxを介してhmaプロキシを実行するサブプロセスを取得しようとしています。私はPythonを初めて使用するので、正しいアプローチを使用していない可能性があります。私がする必要があるのは、バックグラウンドでhmaを実行し、パブリックIPがプログラムの起動前と同じであるかどうか、および30分ごとにhmaプログラムを再実行しないかどうかをプログラムに確認させることです。

基本的に、プログラムは現在のIPをチェックしてから、hmaに接続する必要があります。最初のIPが2番目のIPと一致する場合、つまりhmaが接続されていない場合は、印刷待機中です。IPが一致しない場合は、30分後にhmaを再度実行してください。これが私がこれまでに持っているコードです。

import os
import webbrowser
import time
import socket
import urllib2
import subprocess

response = urllib2.urlopen("http://automation.whatismyip.com/n09230945.asp")
internal = response.read()
print "Internal IP Address is ", internal   
hma = ['cd', '/Desktop/hma', ';', './hma-start', '-r']
subprocess.Popen(hma, shell=True)
response = urllib2.urlopen("http://automation.whatismyip.com/n09230945.asp")
external = response.read()
while (internal == external):
    time.sleep(1)
    response = urllib2.urlopen("http://automation.whatismyip.com/n09230945.asp")
    external = response.read()
    print 'waiting'

while (internal != external):
    print 'It changed'
    hma = ['cd', '/Desktop/hma', ';', './hma-start', '-r']
    subprocess.Popen(hma, shell=True)
    response = urllib2.urlopen("http://automation.whatismyip.com/n09230945.asp")
    external = response.read()

print "External IP Address is ", external

私は何が間違っているのですか?これが完全に間違っている場合は申し訳ありません。サブプロセスモジュールは初めてです

4

2 に答える 2

0

コマンドラインを使用している場合はshell=True、文字列である必要があります。

hma = 'cd /Desktop/hma; ./hma-start -r'
subprocess.Popen(hma, shell=True)

しかし、これをせずに行うこともできますshell=True

hma = ['/Desktop/hma/hma-start', '-r']
subprocess.Popen(hma)

プロセスが終了するまで待ちたい場合は、を呼び出し.communicate()ますPopen-Object

于 2012-07-26T22:26:20.487 に答える
0

こんにちは、私はhmaに精通していませんが、このようなものは機能するはずです。dav1dが言っていない場合は、hma-startがパスにあることを確認してください。なぜ/Desktop/ hmaを使用しているのかよくわかりませんか?あなたが高い特権を持っているとき、それがどこにあるかは問題ではありません。

import os
import webbrowser
import time
import socket
import urllib2
import subprocess
import socket

URL = "http://automation.whatismyip.com/n09230945.asp"
DIR = '/Desktop/hma'
HMA = ['./hma-start', '-r']
WAIT_TIME = 60 * 30 # 30 min
GET_IP = lambda: urllib2.urlopen(URL).read()

if __name__ == '__main__':
    external = internal = GET_IP()
    print "Internal IP Address is %s" % internal
    try:
        os.chdir(DIR)
    except OSError:
        print "%s not found" % DIR

    print "External IP Address is ", external
    while True:
        external = GET_IP()
        if external != internal:
            print "Proxied"
            time.sleep(WAIT_TIME)
        else:
            print "Not Proxied"
            proc = subprocess.Popen(HMA)
            proc.wait()
于 2012-07-27T05:38:09.403 に答える