0

おそらく私は非常に基本的なものを見落としています。私には機能があります

def execution(command):
    os.system(command)

そしてもう一つの機能

def start_this_thread():
    server_thread = threading.Thread(target=execution, args=(exec_str))
    server_thread.start()

エラーが発生します:

self.run()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 483, in run
    self.__target(*self.__args, **self.__kwargs)
TypeError: execution() takes exactly 1 argument (233 given)

どうやら、文字列の長さ (コマンド) の長さは 233?? です。

4

3 に答える 3

2

わかりました..私はそれを理解しました..

それ以外の

  server_thread = threading.Thread(target=execution, args=(exec_str))

そのはず

 server_thread = threading.Thread(target=execution, args=(exec_str,))

理由を知りたいですか?

于 2013-03-07T08:36:17.597 に答える
1

args単純に一連の引数として解釈されます。文字列である を渡しました(args_str)(括弧のペアは、タプル コンストラクターとしてではなく、単にグループ化として解釈されるため)。そのため、文字列はシーケンスとして 233 個の個別の引数 (文字列内の各文字に 1 つ) に展開されます。

代わり(args_str,)に (末尾のコンマに注意してください) を使用して、1 要素のタプルを作成します。

于 2013-03-07T08:43:09.660 に答える
0

問題は、args が展開されることです。これは、exec_string が 1 項目から 233 項目になることを意味します。私は今モバイルにいますが、フォーマットと明確さのために明日いつか編集します.

Pythonでは(something)==somethingですが、(something,)はsomethingのみを要素とする1項目のタプルです。

于 2013-03-07T08:39:10.637 に答える