带有脚本语言(如python)的命令行shell

zpyshell的Python项目详细描述


ZPY外壳[zpy content](https://github.com/albertaleksiev/zpy/raw/content/img/screenshot-1.png)
**具有脚本语言(如python或js)的下一级命令行shell。使用您喜欢的语言在shell中工作。**
```
(zpy)pwd"当前文件夹%s"%z cat
当前文件夹/users/xxxx/pytho nal
(zpy)j request=require('request')
(zpy)j['new york','paris','london','berlin',,"旧金山"
[对于] j请求(HTTP//WeiSt.CO/API.PHP)?城市=${z}`,(err,res,body)=>;同步(json.parse(body.data))
j z.map((data)=>;`${data.location}有温度${data.temperature}f`)
温度为7°F<Br/>伦敦温度为7°F<Br/>柏林温度为4°F<Br/>旧金山温度为24°F<BR/>‘BR/>α’demo<BR/>[zpy demo](https://github.com/albertaleksiev/zpy/raw/content/img/zpy_demo.gif)
在终端中将python和javascript结合起来真的很容易!只要看看[完整视频](https://asciinema.org/a/3fam2wma6o16onjx01xdo0fe)和其他功能!
管道
zpy意识形态说-管道使终端工作再次伟大!管道在zpy中起主要作用。如果你想利用zpy的每一个机会,你应该知道一些关于管道的事情。输入命令将被管道字符分割,每个令牌将由shell、python或js解释器进行求值,令牌将被链接成1个链。zpy将上一个令牌评估结果作为stdin传递给下一个令牌,如果令牌不需要stdin,则可以访问z变量。因此zpy管道的工作方式与标准unix管道类似。

或者命令以[142个linux命令]开头(http://www.mediacollege.com/linux/command/linux command.html)
*如果在令牌开头添加"j",则命令将使用[**javascript**](javascript)语言求值。
*如果在行首添加特定字符,则命令将由[**chain pool**](chain pool)求值。
*在任何其他情况下,命令将由[**python**](python)command**求值**(默认情况下,仅求值python代码-python是默认语言)
从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,从python到unix,加入join(["zpysosoawesomesososososowowowowo訛grep"5 \"6""6""6""6""6""6""6"6 6 py so awesome review 1e8
````
生成包含从0到十,使用`\n`字符连接它,我们可以在**unix管道中使用它**,因为grep use数据被`\n`字符分割。使用**grep**命令筛选结果,只显示与5、6或8位数字相对应的字符串。
```
(zpy)'%s.%s"%('index','php')cat$z
cat:index.php:没有这样的文件或目录
(zpy)'%s.%s"%('index','cpp')touch$z
```
生成"index.php"作为z值,把它送到下一个管道。最后一个管道将由unix系统评估,我们可以像访问path变量或stdin一样访问z变量。因此,您可以编写`$z`来访问变量`…touch$z`或stdin `…grep"index"`.
从unix到python
`````
(z py)ls z.split('\n')filter(lambda x:index'in x,z)list(z)
['index.py]
```
获取当前文件,将其转换为数组并按某些条件进行筛选
我们可以将z变量作为"z"来访问。
from(unix或python)to js and back
如您所见,我们可以从unix或python访问"z"变量只要使用"z"或"$z"变量,此规则在js中的工作方式相同。
```
(zpy)http://weathers.co/api.php?city=new+york'j req(z,(err,res,body)=>;sync(body))j json.parse(z).data"今天是%s,当前温度是%s"%(z['date',z['temperature'])
今天是2017年12月3日,当前温度-14
``````
`python`->;`javascript`->;`javascript`->;`python`
从weather.co获取当前温度和日期。
**注意**这里我们使用javascript的"sync"功能,此命令将从**async**函数调用发送数据(请参阅javascript部分的说明)。

` js${e}`)["python+%s"%x代表x in z]"\n".join(z)sed-e's/$/+bash=zpy/'
python+js 1+bash=zpy
python+js 2+bash=zpy
python+js 3+bash=zpy
python+js 4+bash=zpy
```
dah呢?` javascript`->;`python`->;` bash `



*python 3
*pip3
*compgen
*nodejs或任何其他js运行时。





install
install vip
``````
>pip3 install zpyshell
```````
```````
>`````````
>git clone git-git@github.com:com:git阿尔伯塔列克西耶夫/zpy.git
cdzpy;pip3 install-r requirements.txt
```
如果要使用js的强大功能,请安装[nodejs](https://nodejs.org/en/)。

导航到存储库根文件夹,并像python script
````
python3 zpy/main.py
``````
<<<<<<
```````
``````
python3 tests/main_test.py
`````

>
-
```````

``````
<<
<<
````==
<<<
````````=

`````````` javascript)
*unix shell脚本
*[链池](链池)(附加语言)


更多语言
现在zpy支持python和js,但在第一个版本中,我们将添加更多语言!

python
zpy用python编写,因此,python是第一种被添加和支持的语言。
*[导入](python导入)
*[默认导入](默认导入)
*[自己的模块](添加新模块)
*[创建python模块](1创建python模块)
*[导入模块](2将模块添加到zpy)
*[高级使用管道和模块](3从管道处理输入)




os
(zpy)~来自pil import image
(zpy)find/users/xxxx/pictures-name"*.jpg"z.split('\n')z[random.randint(0,len(z))]image.open(z).show()
````
显示图片文件夹中的随机图像。
**注意:将/users/xxxx/pictures更改为包含图像的文件夹**
```
(z py)~import os
(zpy)pwd os.listdir(z)
["uu pycache"、"a.txt"、"index.py"、"列出所有可用命令和别名的Linux命令"、"readme.md","zpy"]
(zpy)~从zpy.utils导入get_linux_命令
["adduser"、"arch"、"awk"、"bc"、"cal"、"cat"、"chdir"、"chgrp"、"chkconfig"、"chmod"、"chown"、"chroot"、"cksum"、"clear"、"cmp"、"comm"、"cp"、"cron"、"crontab"、"csplit"、"cut"、"date"、"dc"、"dd"、"df"、"diff"、"diff3"、"dir","dircolors"、"dirname"、"du"、"echo"、"ed"、"egrep"、"eject"、"env"、"expand"、"expr"、"factor"、"false"、"fdformat"、"fdisk"、"fgrep"、"find"、"fmt"、"fold"、"format"、"free"、"fsck"、"gawk"、"grep"、"groups"、"gzip"、"head"、"hostname"、"id"、"info"、"install"、"join"、"kill"、"less"、"ln","locate"、"logname"、"lpc"、"lpr"、"lprm"、"ls"、"man"、"mkdir"、"mkfifo"、"mknod"、"more"、"mount"、"mv"、"nice"、"nl"、"nohup"、"passwd"、"paste"、"pathck"、"pr"、"printcap"、"printenv"、"printf"、"ps"、"pwd"、"quota"、"quotacheck"、"quotactl"、"ram"、"rcp"、"rm"、"rmdir"、"rpm"、"rsync","屏幕"、"sdiff"、"sed"、"select"、"seq"、"shutdown"、"sleep"、"sort"、"split"、"su"、"sum"、"symlink"、"sync"、"tac"、"tail"、"tar"、"tee"、"test"、"time"、"touch"、"top"、"traceroute"、"tr"、"true"、"tsort"、"tty"、"umount"、"uname"、"unexpand"、"uniq"、"units"、"unshar"、"useradd"、"usermod","用户"、"uuencode"、"uudecode"、"vd"ir、'watch'、'wc'、'whereis'、'who'、'whoami'、'xargs'、'yes']
```
打印在zpy中定义的所有linux命令。
如果每次启动zpy时不希望导入像"os"这样的常规模块,可以使用**默认导入**
只需执行zpy方法"add_def_imports".
````
(zpy)zpy.add_def_imports("numpy","import numpy as np")
(zpy)zpy.get_def_imports()
numpy=>;import numpy as np
```
完成!启动zpy时,此模块将自动导入。让我们尝试评估一些东西。
```
(zpy)np.arange(20)
[0 1 2 3 4 5 6 7 8 9 11 11 12 13 14 16 17 18 19]
(zpy)np.arange(20)np.std
5.76628129734
```
**注意**这里我们使用的是没有输入参数的np.std,zpy将z-value作为1个参数传递给函数并对其求值。
如果求值的返回类型为function,则默认情况下函数将使用z参数作为参数求值。
zpy有一些很酷的东西,比如模块!模块是您自己的脚本,默认情况下将导入该脚本。zpy有自己的zpy模块。
```
(zpy)zpy
<;zpy.languages.zpy.zpy对象位于0x10268d2e8>;
````
zpy只是python类,它可以存储一些信息(如脚本)。
zpy方法:
--返回脚本列表
-添加脚本(名称)-当前的"添加新脚本"方法,返回"添加新脚本(名称=名称)"`
-添加新脚本(名称,script)-创建新脚本
-删除脚本(name)-删除脚本
-eval(name,input='')-eval脚本并发送input
-eval(name)-使用'eval'方法,返回'eval(name=name)`
-最后一个'u z command()-返回最后一个z命令。**注意**在求值"last_z command()"方法和值返回后,最后一个z命令将是"last_zcommand()"
-添加模块(模块名,到模块文件的路径)-添加模块,它将从z py中可用,如"模块名"
-获取模块()-返回所有模块
-删除模块(名称)-按名称删除模块,**将不会删除文件**
-as_table(data)-尝试将字符串转换为表数据
````
(zpy)zpy.get_scripts()
(zpy)zpy.add_new_script("ls","ls-lah")
(zpy)zpy.get_scripts()
ls=>;ls-lah
(zpy)zpy.eval('ls')
总计408
drwxr-xr-x9 Albert Staff 306b 2月27日22:29。
drwxr-x r-x 33 Albert Staff 1.1k 2月24日22:47。
drwxr-xr-x 8 Albert Staff 272b 2月27日22:36。idea
-rw-r--r--1 Albert Staff 6.1k 2月27日22:13 readme.md
drwxr-x 7 Albert Staff 238b 2月27日22:35 zpy
-rw-r--r--1albert staff 685b 2月27日22:25 index.py
-rw-r--r--1 albert staff 182k 2月1日20:00 linux命令列出所有可用的命令和别名
-rw-r--r--1 albert staff 36b 2月27日15:47 random.file
-rw-r--r--1 albert staff 24b 2月27日22:13 zpy.conf
``````
高级材料
```
(zpy)~导入请求,json
(zpy)请求。获取('http://finance.google.com/finance/info?client=ig&q=nse:hdfc')z.text z.replace('//','')json.loads(z)[0]z['pcls_fix']
1375.7
(zpy)zpy.last_zcommand()
requests.get('http://finance.google.com/finance/info?client=ig&q=nse:hdfc')z.text z.replace('//','')json.loads(z)[0]z['pcls_u fix']
(zpy)zpy.last_zcommand()
zpy.last_zcommand()
(zpy)requests.get('http://finance.google.com/finance/info?client=ig&q=nse:hdfc')z.text z.replace('//',(z)[0]z['pcls_fix']
1375.7
(zpy)zpy.last_zcommand()zpy.add_script("get stock nse:hdfc")
(zpy)zpy.eval('get stock nse:hdfc')
1375.7
``````
````````
```````>br/>````````````>br/>`````````````````````>br/>``````````````````````python,在zpy中你可以在几个步骤中,1)创建python模块

(z py)pwd
/path
(zpy)cd to
(zpy)pwd
/path/path
(zpy)cd to
(zpy)pwd
/path/to
(zpy)['def sq方(a):','\tretura*a']\n".join(z)cat>;一些模块.py
(zpy)cd to
(zpy)pwd
(zpy)pwd
/path/path/path/to
(zpy)(zpy(如图所示)cat-some-cumodule.py
def-square(a):
returna*a
```
将名称和py文件位置添加到[模块]部分:
````
……
[模块]
……
……
some_module.py/to/some_module.py/to/some_module.py
`````
*zpy.conf*

>
>>``````
(zpy)some_module.square(4)
16
```
````
(zpy)some_module.square.square(4)
>16
``````>br/>````````3)处理来自管道的输入
将管道输出传递到模块功能-非常简单。您只需要在函数参数列表中声明"zpy廑input":
```
如果我们想实现pow函数,我们可以使用curring,我们应该传递两个变量-基值和指数值。但是pipe只能发送一个变量,我们可以将它们作为字符串数组传递,并在函数中解析它们**或者**我们可以使用carry,
````
import math
def square(a):
return a*a


def square(zpy_input):
return square(zpy_input)

def power(base,指数=无):
如果指数为无:
定义当前函数(zpy_input):
返回math.pow(base,zpy_input)

返回当前函数
否则:
返回math.pow(base,指数)
```
*zpy.conf*
完成通用函数幂!让我们来测试它吧,它是有史以来最流行的语言之一。可以将nodejs与文件系统i/o或其他js运行时等功能一起使用。特别感谢[pyexecjs](https://github.com/doloopwhile/pyexecjs)!zpy在内部使用这个模块,因此您可以在上面的链接中看到可用运行时的完整列表。
大家都知道javascript使用异步函数,这是一个问题,因为管道不能异步工作。这个问题将通过使用[`sync`](sync function)或[`sync_u err`](sync_err)函数来解决。
*[语法](js语法)
*[导入](js导入)
*[默认导入](js默认导入)
*[异步](异步到同步)
*[`sync`函数](sync function)
*[`sync_err`函数](sync_err)


_js syntax
如果在标记的开头添加"j",则**javascript**命令将计算命令。
```
(zpy)j 2+3
5
````
js imports
如果不想将某些模块导入js链,请使用"require"。
`````
npm i request--global

(zpy)j request=require('request')
添加了新的要求:{[['request',"request"]}
```
**注意**如果每次启动zpy时都希望导入像"request"这样的常规模块,则应通过全局方式安装模块
js default imports
,您可以使用**默认导入**。
您只需要执行方法"add_def_imports"从"zjs"对象。
`````
(zpy)zjs.add_def_imports('request',require("request"))
(zpy)zjs.get_def_imports()
request=>;require("request")
`````
完成!
如果我们想要发出请求,并且在请求之后将数据发送到下一个链,那么在我们转到下一个链之前,应该先对请求进行细化。
```
(zpy)j[1,2,3].join("-")~z.split("-"
['1','2','3']//it's work great!因为js链不异步。
(zpy)j请求('http://weathers.co/api.php?city=new+york',(err,res,body)=>;"")
{'method':'get','uri':{'auth':none,'path':'/api.php?city=new+york','host':'weathers.co','hostname':'我们athers.co,'hash':无,'query':'city=new+york,'protocol':'http:','port':80,'search':'?city=new+york','ref':'http://weathers.co/api.php?city=new+york,'pathname':'/api.php,'slashes':true},'headers':{host':'weathers.co'}
````
正如我们看到的,求值请求函数的结果是具有请求属性的对象,如:ref、headers、host等。zpy正在尝试将其转换为json格式。如果求值结果是'function',并且此函数具有'skip_print='zkip戋'zpy skip result of evaluation属性(在异步函数调用中会有帮助)。**zpy不返回计算结果,如果这是一个func,并且func具有属性'skip_print='zkip_',或者我们使用'sync`,'sync_err`函数调用。**
sync`命令将从**async**函数调用发送数据并完成当前链。它真的很容易使用。
````
(zpy)j请求('http://weathers.co/api.php?city=new+york',(err,res,body)=>;sync(body))"来自js`%s`%z的python retreive请求结果
来自js`{"apiversion":"1.0","data":{"location":"new york","temperature":"-14","skytext":"light snow","humity":"64","wind":"7.56 km/h","date":"03-12-2017","day":"sunday"}`
````
````sync_err`
async函数调用抛出错误。
`````
(zpy)j settimeout(function(){sync_err('some error')},200)
回溯(最近一次调用):
文件….

execjs.\u异常。程序错误:某些错误
````



要开始使用类似于`[for]`的函数,只需在管道字符``之后键入此关键字,例如`[for]`。方括号`[]`表示``的*链池*函数'。链池以**stdin**作为输入stdin,对stdin做一些处理,在`[链函数]`关键字后输入什么工作,您可以将**最喜爱的语言**与链池函数一起使用。
`[for]`函数
`[for]`函数遍历*数组*中的每一项或*被` ` ` ` ` ` ` `字符分割的数据作为stdin,并用任何其他语言计算每个迭代项。
语法
**` ` ` ` ` ` ` `其他语言命令`,其中`[]`是*链池*语法,`for`-用于函数。< BR>![链池[for]函数](https://raw.githubusercontent.com/albertaleksiev/zpy/content/img/chain%20pool%20%5bfor%5d%20function.jpg)


这里我们通过python生成数据,只需键入数组初始化关键字,然后使用`[for]`关键字,将该数组拆分为2个stdin参数,对每个参数("folder1"和"folder2")求值shell函数"ls",最后将结果联接到数组中,并发送到下一个链中。在最后一个链中,我们只是用`,`character.
```
(zpy)['.','..'][for]ls$z','.join(z)
license.txt
readme.md
zpy….,parent_folder content
``

生成数组,使用*chain pool*函数'for',并使用','字符连接结果。
```
(zpy)~将numpy导入为np
(zpy)np.arange(10)。重塑(2,5).tolist()[for][for]z**2
[[0,1,4,9,16],[25,36,49,64,81]]
````
按"power"函数迭代每一行和每一列并更改每一值。




<<
````
(z py)~import os
(zpy)pwd os.listdir(z)listdir(z)"文件除以逗号%s"%",".join(z)
文件除以commma.idea,a.txt.txt,a.txt.txt,a.txt,a.txt,pycache,a.txt,a.txt,a.txt,a.txt,commma.索引.py,列出所有可用命令和别名的linux命令,readme.md,zpy
```
使用shell命令获取当前目录,以z变量形式导入python代码,并从TerminalTables中打印最后一个链的结果import asciitable,singleTable
(zpy)ls-lah z.split('\n')。|[''.join(x.split()).split('')表示x在z中]|单表(Z).table
生物多样性<
&——3月4日23:32。

<
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-评价"ls-lah"到很棒的桌子!
**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**注**` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `地址:"head"在x,z)list(z)
['html>;\n<;html>;\n<;head>;\n','\n<;/head>;\n\n<;body>;\n<;div>;\n']
(zpy)`wget-qo-http://example.com z.split("")filter(lambda x:x中的"head",z)list(z)"总大小:%s"%len(z)
总大小:2
`````
从页面下载内容并计算当前入口单词"head"
````
(z py)find./-name"*.py"z.split("\n")[:2]
['.//index.py",'.//z py/languages/languageanalyzer.py']
(zpy)find./-name"*.py"z.split("\n")[:2]"\n".join(z)grep"an"
。//zppy/languages/languageanalyzer.py
````
第一个求值将在当前目录中找到文件并获得前2个结果。第二次评估也一样,通过shell命令grep`
``
(zpy)~ import re
(zpy)"https://www.reddit.com/r/books/"`wget-qo-$z re.findall(r"book[^.].*",z,re.ignorecase)"count:%s%len(z)
count:645
```````
(zpy)~import-uuid
(zpy)uuid.uuid4()str(z)cat>;random.file
(zpy)cat random.file
(zpy)cat random.file
7ff48f51-b31d-44c2-9aaf-428a6309973428a6309973428a63049496868686868686868686303939393939292929296
``````````>>35;**危险技巧**(不要评估)
```
(zpy)~utils import get_linux_commands

(zpy)~import random,os

(zpy)get_linux_commands()z[random.randint(0,len(z))]os.system(z)
staff com.apple.sharepoint.group.1所有人本地帐户_appserverusr admin _appserveradm _lpadmin _appstore _lpoperator _developer…
`````
获取在zpy中声明的所有shell命令,并执行随机命令

````
(zpy)~import random,os

(zpy)["你很幸运","displaysteepnow","lock"]z[random.randint(0,len(z))]os.system("pmset%s"%z)
0
````
如果你在osx上运行,33%不会发生任何事情
许可证
根据[麻省理工学院许可证](http://open source.org/licenses/mit)的条款,该模块可作为开放源码提供。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaI从另一个Jframe类B扩展了一个J帧类a,但在显示帧B时,它也在B中播放帧a   java适配器模式应用程序   使用并行流从java列表中获取Pojo,而不使用任何类型的索引   java更新文本文件中的双精度   java从webservice返回自定义对象   java在查找多个集合的交集时使用Retainal()的最快顺序   java如何在安卓社交媒体应用程序中应用用户对用户支付?   c代码能引发java异常吗?   Java数组填充了最后一个插槽中的内容   java JOOQ从大表中获取数据:良好实践   使用ApachePOI在JavaSwing中嵌入excel工作表   java如何使用枚举定义常量值组   java JavaFX将文本追加到TextArea引发异常   javascript JS在firefox中无法正常工作   java如何在同一片段中的片段打开后编辑该片段打开的活动中的值   对夏洛克的命令。py的解释不同于linux命令行和java进程api   php在Java中动态创建全局多维数组   html Java XML Transformer将“\n”替换为空格   Javac编译编码问题