我想在Windows中将字符串打印到命令行/终端,然后编辑/更改字符串并将其读回。谁知道怎么做?感谢
print "Hell"
Hello! <---Edit it on the screen
s = raw_input()
print s
Hello!
答案 0 :(得分:2)
你可以做一些ANSI技巧,使它看起来像你在屏幕上编辑。 Check out this link(也类似于this SO post on colors)。
这仅适用于某些终端和配置。因人而异。
这个python脚本在我的Win7上的Cygwin终端上运行:
print 'hell'
print '\033[1A\033[4CO!'
在一行上结束打印hellO!
。第二次打印将光标向上移动一行(Esc [1A]然后超过4个字符(Esc [4C]),然后打印'O!'。
它不会让你读回来虽然......只有1/2答案。
答案 1 :(得分:0)
os.sys.stdout只能写入,但只要你没有写回车符,就可以用\b
或整行\r
删除最后一行的某些字符。
(但是,另请参阅my question有关标准python控制台/终端的限制)
我曾经做过一些输出练习(包括一个状态栏)来编写,删除或动画,如果你愿意,也许它是有帮助的:
from __future__ import print_function
import sys, time
# status generator
def range_with_status(total):
n=0
while n<total:
done = '#'*(n+1)
todo = '-'*(total-n-1)
s = '<{0}>'.format(done+todo)
if not todo:
s+='\n'
if n>0:
s = '\r'+s
sys.stdout.write(s)
sys.stdout.flush()
yield n
n+=1
print ('doing something ...')
for i in range_with_status(10):
time.sleep(0.1)
print('ready')
time.sleep(0.4)
print ('And now for something completely different ...')
time.sleep(0.5)
msg = 'I am going to erase this line from the console window.'
sys.stdout.write(msg); sys.stdout.flush()
time.sleep(1)
sys.stdout.write('\r' + ' '*len(msg))
sys.stdout.flush()
time.sleep(0.5)
print('\rdid I succeed?')
time.sleep(4)
答案 2 :(得分:0)
raw_input
接受“提示消息”的参数,因此使用它来输出消息,然后将其添加到您返回的内容中。但是,这不允许你退回到提示符中,因为它是一个提示而不是输入的一部分。
s = "Hell" + raw_input("Hell")
print s
答案 3 :(得分:0)
如果它是出于你自己的目的,那么这是一个使用剪贴板而不会丢失之前的内容的脏小黑客:
def edit_text_at_terminal(text_to_edit):
import pyperclip
# Save old clipboard contents so user doesn't lose them
old_clipboard_contents = pyperclip.paste()
#place text you want to edit in the clipboard
pyperclip.copy(text_to_edit)
# If you're on Windows, and ctrl+v works, you can do this:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("^v")
# Otherwise you should tell the user to type ctrl+v
msg = "Type ctrl+v (your old clipboard contents will be restored):\n"
# Get the new value, the old value will have been pasted
new_value= str(raw_input(msg))
# restore the old clipboard contents before returning new value
pyperclip.copy(old_clipboard_contents )
return new_value
请注意,ctrl + v不适用于所有终端,尤其是Windows默认设置(有ways to make it work,但我建议使用ConEmu代替。)
自动执行其他操作系统的击键将涉及不同的过程。
请记住,这是一个快速的黑客,而不是&#34;正确的&#34;解。对于暂时存储在剪贴板上的所有博士论文的丢失,我不承担任何责任。
对于正确的解决方案,有更好的方法,例如Linux的curses,而在Windows上它值得研究AutHotKey(可能会抛出一个输入框,或做一些击键/剪贴板巫术)。