5

parse_input.pybashからpythonスクリプトを呼び出しています

parse_input.py'\n'多くの文字を含むコマンド ライン引数を取ります。

入力例:

$ python parse_input.py "1\n2\n"

import sys
import pdb

if __name__ == "__main__":

    assert(len(sys.argv) == 2)

    data =  sys.argv[1]
    pdb.set_trace()
    print data

`data = "1\\n2\\n"私はpdbでそれを見ることができますが、data="1\n2\n"

に置き換えられるだけで\ (なしで)同様の動作を見ました\n\\

余分なものを削除するには\

\同じ入力をファイルから受け取ることもできるため、スクリプトで余分な処理を行いたくありません。

bash バージョン: GNU bash、バージョン 4.2.24(1)-release (i686-pc-linux-gnu)

Python バージョン: 2.7.3

4

2 に答える 2

8

\nBash はpython のように解釈せず、2 文字として認識します。

から「デコード」することにより、Pythonでリテラル(つまり2文字)を改行として解釈できます。\nstring_escape

data = data.decode('string_escape')

デモンストレーション:

>>> literal_backslash_n = '\\n'
>>> len(literal_backslash_n)
2
>>> literal_backslash_n.decode('string_escape')
'\n'
>>> len(literal_backslash_n.decode('string_escape'))
1

他のpython 文字列エスケープ シーケンスも解釈されることに注意してください。

于 2013-02-16T16:59:40.603 に答える
8

Bash は、通常の一重引用符および二重引用符で囲まれた文字列のエスケープ文字を解釈しません。(一部の)エスケープ文字を解釈させるには、次を使用できます$'...'

   Words of the form $'string' are treated specially.  The word expands to
   string, with backslash-escaped characters replaced as specified by  the
   ANSI  C  standard.  Backslash escape sequences, if present, are decoded
   as follows:
          \a     alert (bell)
          \b     backspace
          \e     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \nnn   the eight-bit character whose value is  the  octal  value
                 nnn (one to three digits)
          \xHH   the  eight-bit  character  whose value is the hexadecimal
                 value HH (one or two hex digits)
          \cx    a control-x character

   The expanded result is single-quoted, as if the  dollar  sign  had  not
   been present.

すなわち

$ python parse_input.py $'1\n2\n'
于 2013-02-16T17:02:04.753 に答える