2016-09-13 9 views
1

私はPythonのprint文を文字列として含むリストを含むpythonスクリプトを書いています。私の関数では、これらの文を実行するためにexec関数を実行するforループを使用しています。ここでPythonのprint文を文字列として実行するには?

は私の関数である:私はrun_statements()機能を実行すると

g_list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"] 

def run_statements(): 
    for item in g_list: 
     exec(item) 

は、私は次のような出力が得られます。

Wow! 
Great! 
Epic! 

は基本的に、私はそれ以降の文字列として出力を保存したいです、私は自分のデータベースに保存することができます。

どうすればいいですか?

EDIT:次の質問でpython: get the print output in an exec statement彼は、出力を取得しようとしている、私の質問は、私はあなたが印刷何を保存したい場合は、文字列

+0

「印刷」のポイントは、テキストをメモリに保存しないでどこかに送信することです。それを文字列として保存したい場合は、単にそれを行い、必要に応じて印刷するだけです。また、達成しようとしている目標が何であれ、 'exec'は間違ったアプローチである可能性があります。 – TigerhawkT3

+0

最終結果が期待されるものの正確なサンプル出力を与えることはできますか?あなたは弦を言った。だからあなたは欲しい: ''うわー!\ nグレート!\ nエピック\ n "'? – idjaw

+0

@idjawはい!それは私が欲しいものです。 – Elisha512

答えて

2

をしたい場合別の回答)、名前printを慎重に注意深く慎重に慎重に保管しておいてから、慎重に、注意深く慎重に慎重に名前printを適切な定義に戻すことができます。このように:

>>> g_list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"] 
>>> old_print = print 
>>> def print(s): # redefining the built-in print function! terrible idea 
... global catstr 
... catstr += s 
... 
>>> catstr = "" 
>>> for s in g_list: exec(s) 
... 
>>> catstr 
'Wow!Great!Epic!' 
>>> print = old_print # Don't forget this step! 

これは完全に不道徳であり、私はあなたにそれをするよう助言しませんでした。私はあなただけを言ったすることができますそれを行う。

このプランの不適当性を強調するには、execをめったに使用しないでください。それは危険です。組み込み関数の名前を異なる関数に再割り当てすることは非常にまれです。それは危険です。両方のコードを同じコードで実行すると、特にメンテナンスプログラマーが潜在的な影響を認識せずにコードを「ほんの少し」編集した後、あなたの日が本当に壊れてしまう可能性があります。

+0

私はそれの危険性を理解していますが、それはまさに私が探しているものかもしれません。私はそれをテストし、正常に動作するかどうかを確認します – Elisha512

+0

この文はエラーを出します:old_print =無効な構文を表示します – Elisha512

+0

あなたはPython 3.xですか?これがコードを実行した場所です。 Python 2.xでは動作しません。 'print'は組み込みコマンドであり、関数ではありません。 –

1

として出力を取得しようとしていた方法で異なっていますカスタムコマンドを作成し、出力を変数に保存することができます。次に例

output_bin = "" 

def printsave(string): 
    print string 
    if len(string) > 1: 
     if string[-2] == "\n": 
      output_bin = output_bin + string 
     else: 
      output_bin = output_bin + string + "\n" 
    else: 
     output_bin = output_bin + string + "\n 

のために、あなたはそれが文字列output_binに保存されprintsave()呼び出すたび。とで提案されているように、別の名前での印刷のような機能とは対照的に、あなたが本当に文字列のリスト(にprint書が必要な場合は、あなたが...それは、アレイに保存する

output_bin = [] 

def printsave(string): 
    print string 
    if len(string) > 1: 
     if string[-2] == "\n": 
      output_bin.append(string) 
     else: 
      output_bin.append(string + "\n") 
    else: 
     output_bin.append(string + "\n) 
+0

これは有効なPython構文ではありません。これは正しくありません。 – idjaw

+0

@idjaw申し訳ありませんが、私は全くテストしませんでした。 :/ – baranskistad

+0

@idjawどうしたのですか?もしあなたが私に言ってくれたら、王様になるでしょう。 – baranskistad

関連する問題