0

Pythonでコマンドライン引数に整数を渡してテキストファイルを編集したいです。しかし、私のコードは機能していません。誰かが私が間違っているところを指摘してくれますか?

    import sys, argparse
    def main(argv=None):
    if argv is None:
        argv=sys.argv[1:]
        p = argparse.ArgumentParser(description="Editing omnetpp.ini")
        p.add_argument('arg1', action='store', default= 1, type=int, help="number of clients")
        args = p.parse_args(argv)
        n = args.arg1
        f = open('C:\\Users\Abcd\Desktop\Omnet\omnetpp.ini', 'a')
        for i in range(n):
            f.write('*.voipClient['+str(i)+'].udpApp['+str(i)+'].destAddresses = "voipGateway"\n')
            f.write('*.voipGateway.udpApp['+str(i)+'].destAddresses   = "voipClient['+str(i)+']"\n')
        f.close()

整数 5 がコマンド ライン引数を介して渡された場合、テキスト ファイルに次の行を追加する必要がありますが、これは発生していません 出力

*.voipClient[0].udpApp[0].destAddresses = "voipGateway"
*.voipGateway.udpApp[0].destAddresses   = "voipClient[0]"
*.voipClient[1].udpApp[1].destAddresses = "voipGateway"
*.voipGateway.udpApp[1].destAddresses   = "voipClient[1]"
*.voipClient[2].udpApp[2].destAddresses = "voipGateway"
*.voipGateway.udpApp[2].destAddresses   = "voipClient[2]"
*.voipClient[3].udpApp[3].destAddresses = "voipGateway"
*.voipGateway.udpApp[3].destAddresses   = "voipClient[3]"
*.voipClient[4].udpApp[4].destAddresses = "voipGateway"
*.voipGateway.udpApp[4].destAddresses   = "voipClient[4]"

私は次の手順に従っています:

  1. コードは test.py に保存されます
  2. コマンドラインから C:\Users\Abcd\Desktop>python test.py 5
4

1 に答える 1

1

ループ内でファイルを閉じないでください。ファイルが閉じられるとすぐに、そのファイルに書き込むことができなくなります (実際、閉じられたファイル オブジェクトに書き込もうとすると、エラーがスローされます)。代わりに、ループの後に閉じます。また、各文を改行するには、改行記号で文字列を終了します\n("ENTER" を押すのと同じです)。

f = open('C:\\Users\Abcd\Desktop\Omnet\omnetpp.ini', 'a')
for i in range(n):
    f.write('*.voipClient['+str(i)+'].udpApp['+str(i)+'].destAddresses = "voipGateway"\n')
    f.write('*.voipGateway.udpApp['+str(i)+'].destAddresses   = "voipClient['+str(i)+']"\n')
f.close()

編集

ちなみに、Rostyslav Dzinko がコメントで述べたように、コードを定義する方法は、メイン関数を定義する方法ではありません。実際、次のようなことを試してください (この SO の質問も参照してください):

if __name__ == '__main__':
    p = argparse.ArgumentParser(description="Editing omnetpp.ini")
    p.add_argument('arg1', action='store', default= 1, type=int, help="number of clients")
    args = p.parse_args()
于 2012-08-09T11:39:41.567 に答える