Nie*_*els 24 python command-line
我最近开始学习python.我用Django创建了一些基本的webapps并编写了一些简单的脚本.在使用VIM作为Python IDE后,我真的感到满意,我喜欢"终端程序"(这是否有官方术语?).现在,我能够做一些简单的事情,例如询问某人的年龄并将其打印到屏幕上.然而,这归结为运行.py脚本,并在完成此脚本之后返回正常的bash.我想创建一个程序,我可以从命令行运行,并允许与VIM相同的用户体验(一个打开和关闭).例如,我创建了一个简单的脚本来导入RSS源.如果我可以打开我的终端类型我的程序名称 - >程序将打开 - >然后我想使用诸如:findsomething之类的命令将会很酷.
总结:
ox.*_*ox. 23
在*nix系统(linux/unix)上,
如果您:
$ chmod 0744 your_file.py
-rwxr--r-- your_file.py
Run Code Online (Sandbox Code Playgroud)
并添加python的路径作为第一行your_file.py:
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
或(在我的情况下):
#!/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)
一旦你这样做,而不是像这样运行它:
$ python your_file.py
Run Code Online (Sandbox Code Playgroud)
你可以像这样运行它:
$ ./your_file.py
Run Code Online (Sandbox Code Playgroud)
甚至将其重命名为yourfile并运行如下:
$ ./yourfile
Run Code Online (Sandbox Code Playgroud)
如果你然后复制yourfile到你的bin(即#!/usr/bin/,或#!/usr/local/bin/)你可以像这样运行它:
$ yourfile
Run Code Online (Sandbox Code Playgroud)
然后你可以...
使用raw_input()征求和你的用户得到输入.
your_file.py:
#!/usr/local/bin/python
import os
while(True):
# cntrl-c to quit
input = raw_input('your_prompt$ ')
input = input.split()
if input[0] == 'ls':
dire = '.'
if len(input) > 1:
dire = input[1]
print('\n'.join(os.listdir(dire)))
else:
print('error')
Run Code Online (Sandbox Code Playgroud)
your_file.py 使用示例:
$ chmod 744 your_file.py
$ cp your_file.py /usr/local/bin/your_file
$ your_file
your_prompt$ ls
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
your_prompt$ ls .
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
your_prompt$ pwd
error
your_prompt$ ^CTraceback (most recent call last):
File "/usr/local/bin/your_file", line 7, in <module>
input = raw_input('your_prompt$ ')
KeyboardInterrupt
$
Run Code Online (Sandbox Code Playgroud)
sys.argv运行脚本时从命令行获取参数:
list_argv.py:
#!/usr/local/bin/python
import sys
print(sys.argv)
Run Code Online (Sandbox Code Playgroud)
list_argv.py 使用示例:
$ python list_argv.py
['list_argv.py']
$ python list_argv.py hello
['list_argv.py', 'hello']
$ python list_argv.py hey yo
['list_argv.py', 'hey', 'yo']
$ chmod 744 list_argv.py
$ ./list_argv.py
['./list_argv.py']
$ ./list_argv.py hi
['./list_argv.py', 'hi']
$ ./list_argv.py hey yo
['./list_argv.py', 'hey', 'yo']
$ cp list_argv.py /usr/local/bin/list_argv
$ list_argv hey yo
['/usr/local/bin/list_argv', 'hey', 'yo']
Run Code Online (Sandbox Code Playgroud)
替换raw_input()为sys.argv.
'your_ls.py':
#!/usr/local/bin/python
import sys
import os
dire = '.'
if len(sys.argv) > 1:
dire = sys.argv[1]
print('\n'.join(os.listdir(dire)))
Run Code Online (Sandbox Code Playgroud)
'your_ls.py'使用示例:
$ chmod 744 your_ls.py
$ cp your_ls.py /usr/local/bin/your_ls
$ your_ls
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
$ your_ls .
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
$ your_ls blah
Traceback (most recent call last):
File "/usr/local/bin/your_ls", line 9, in <module>
print('\n'.join(os.listdir(dire)))
OSError: [Errno 2] No such file or directory: 'blah'
Run Code Online (Sandbox Code Playgroud)
用于subprocess.Popen从命令行访问任何可能的内容.
your_subprocess.py:
#!/usr/local/bin/python
import os
import subprocess
while(True):
# cntrl-c to quit
input = raw_input('your_prompt$ ')
process = subprocess.Popen(input, shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = process.communicate()
print(out)
print(err)
Run Code Online (Sandbox Code Playgroud)
your_subprocess.py 使用示例:
$ chmod 744 your_subprocess.py
$ cp your_subprocess.py /usr/local/bin/your_subprocess
$ your_subprocess
your_prompt$ ls
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
your_prompt$ ls .
list_argv.py
your_file.py
your_ls.py
your_subprocess.py
your_prompt$ pwd
/Users/ox/_workspace/cmd_ln
your_prompt$ blah
/bin/sh: blah: command not found
your_prompt$ ^CTraceback (most recent call last):
File "/usr/local/bin/your_subprocess", line 8, in <module>
input = raw_input('your_prompt$ ')
KeyboardInterrupt
$
Run Code Online (Sandbox Code Playgroud)
弄坏东西!
:-D
玩得开心!
-牛
小智 5
执行交互式控制台应用程序的最简单方法是:
while True:
command = raw_input('command? ').strip()
if command == 'say_hello':
print('Hello')
elif command == 'other_thing':
print('Doing something else')
elif command == 'quit':
break
else:
print('Invalid Command.')
Run Code Online (Sandbox Code Playgroud)
这就是基本结构。如果你想要更像 vim 的东西,你可能需要使用 curses 库。