How to enter escape character in a positional string argument from the command line?

Jach Feng jfong at ms4.hinet.net
Tue Dec 20 22:10:46 EST 2022


Thomas Passin 在 2022年12月20日 星期二上午11:36:41 [UTC+8] 的信中寫道:
> On 12/19/2022 9:24 PM, Jach Feng wrote: 
> > Mark Bourne 在 2022年12月20日 星期二凌晨4:49:13 [UTC+8] 的信中寫道: 
> >> Jach Feng wrote: 
> >>> I have a script using the argparse module. I want to enter the string "step\x0A" as one of its positional arguments. I expect this string has a length of 5, but it gives 8. Obviously the escape character didn't function correctly. How to do it? 
> >> That depends on the command-line shell you're calling your script from. 
> >> 
> >> In bash, you can include a newline in a quoted string: 
> >> ./your_script 'step 
> >> ' 
> >> (the closing quote is on the next line) 
> >> 
> >> Or if you want to do it on a single line (or use other escape 
> >> sequences), you can use e.g.: 
> >> ./your_script $'step\x0a' 
> >> (dollar sign before a single-quoted string which contains escape sequences) 
> >> 
> >> -- 
> >> Mark. 
> > That's really good for Linux user! How about Windows?
> One way is to process the argument after it gets into Python rather than 
> before. How hard that will be depends on how general you need the 
> argument to be. For your actual example, the argument comes into Python 
> as if it were 
> 
> arg1 = r"step\x0A" # or "step\\x0a" 
> 
> You can see if there is an "\\x": 
> 
> pos = arg1.find('\\x') # 4 
> 
> Replace or use a regex to replace it: 
> 
> arg1_fixed = arg1.replace('\\x0A', '\n') 
> 
> Naturally, if "\\x0A" is only a special case and other combinations are 
> possible, you will need to figure out what you need and do some more 
> complicated processing.
That's what I am taking this path under Windows now, the ultimate solution before Windows has shell similar to bash:-)


More information about the Python-list mailing list