今日、データを処理し、カスタマイズされた形式で印刷するための Python スクリプトを作成しました。インタラクティブな Python で期待どおりに動作しました。次に、ターミナルで出力をテキスト ファイルにリダイレクトしようとしたところ、予期しない事態が発生しました。
私が試した特定の例は、データのリストを列に配置し、LaTeX 表形式で出力することでした。多かれ少なかれ次のように機能します。
foo(mylist, sep_col='\t', sep_row=r'\\ \hline')
ターミナルでスクリプトを実行しようとしたとき、次のようにしました。
$ python -c "from foo import foo; foo(mylist, col_sep=' & ', row_sep=r' \\ \hline')" > results.txt
\\ \hline
しかし、その部分は のように表示されていることが判明しました\ \hline
。これは、インタラクティブな Python とは異なります。
問題 (またはその背後にある原則) をさらに詳しく調べたところ、によって処理された Python スクリプトの動作は、$ python -c
対話型 Python では同じではないことがわかりました。
インタラクティブな Python では>>> print r'\\'
:\\
ただし、ターミナルで$ python -c "print r'\\'"
は、次のようになりSyntaxError
ます。
File "<string>", line 1
print r'\'
^
SyntaxError: EOL while scanning string literal
バックスラッシュの数が 3 または 4 の場合にターミナルが表示されるようです\\
。5 または 6 の場合はエラーが発生します。7 つのバックスラッシュは Giveを意味します。これは、この環境で\\\\
は Give の方法がないことを意味します。\\\
私はかなり長い間この問題を探してきましたが、$ python -c
. 重複した場合は事前に申し訳ありません。