Quy trình con python 2.7 ví dụ
Hàm tiện tay quy trình con. check_output rất hấp dẫn khiến người ta khó có thể từ chối sử dụng nó. To check out a command, only required.
In [1]. import subprocess as sprChuyện này không có gì sai cho đến khi có điều gì sai xảy ra Show
Nếu có lỗi xảy ra, ta chỉ nhận được một ngoại lệ chứ không phải là phần lỗi của câu lệnh (stderr). Trong [4]. đầu ra = spr. check_output(['ls', '/etc/hostx']) Bỏ qua lỗi luôn là nguồn gốc của đau thương, hãy sử dụng Popen để thu được cả thiết bị xuất chuẩn và thiết bị xuất chuẩn. Trong [8]. p = mùa xuân. Popen(['ls', '/etc/hostx'], stdout=spr. ỐNG, stderr=spr. PIPE)Nếu đã quen dùng check_ouput, hãy thay đổi thói quen, vì một thế giới ít lỗi hơn 😲 Bài viết thực hiện trên Python. In [7]. nhập sys; . phiên bản) Hết. HVN at http. //www. familug. org/ and http. // pymi. vn xonsh is a shell language and command prompt. Unlike other shells, xonsh is based on Python, with additional syntax added that makes calling subprocess commands, manipulating the environment, and dealing with the file system easy. The xonsh command prompt gives users interactive access to the xonsh language While all Python code is also xonsh, not all Bash code can be used in xonsh. That would defeat the purpose, and Python is better anyway. Still, xonsh is Bash-wards compatible in the ways that matter, such as for running commands, reading in the Bash environment, and utilizing Bash tab completion The purpose of this tutorial is to teach you xonsh. There are many excellent guides out there for learning Python, and this will not join their ranks. Similarly, you’d probably get the most out of this tutorial if you have already used a command prompt or interactive interpreter Let’s dive in Starting xonsh#Assuming you have successfully installed xonsh (see http. //xon. sh), you can start up the xonsh interpreter via the >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL6 command. Suppose you are in a lesser terminal $ xonsh snail@home ~ $ Now we are in a xonsh shell. Our username happens to be >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL7, our hostname happens to be >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL8, and we are in our home directory ( >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL9). Alternatively, you can setup your terminal emulator (xterm, gnome-terminal, etc) to run xonsh automatically when it starts up. This is recommended Basics#The xonsh language is based on Python, and the xonsh shell uses Python to interpret any input it receives. This makes simple things, like arithmetic, simple >>> 1 + 1 2 Note From here on we’ll be using >>> 'HOME' in ${...} True0 to prefix (or prompt) any xonsh input. This follows the Python convention and helps trick syntax highlighting, though >>> 'HOME' in ${...} True1 is more traditional for shells Since this is just Python, we are able to import modules, print values, and use other built-in Python functionality >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] We can also create and use literal data types, such as ints, floats, lists, sets, and dictionaries. Everything that you are used to if you already know Python is there >>> d = {'xonsh': True} >>> d.get('bash', False) False The xonsh shell also supports multi-line input for more advanced flow control. The multi-line mode is automatically entered whenever the first line of input is not syntactically valid on its own. Multi-line mode is then exited when enter (or return) is pressed when the cursor is in the first column $ xonsh snail@home ~ $0 Flow control, of course, includes loops $ xonsh snail@home ~ $1 We can also define and call functions and classes. I’ll mostly spare you the details, but this is pretty cool $ xonsh snail@home ~ $2 For easier indentation, Shift+Tab will enter 4 spaces. And that about wraps it up for the basics section. It is just like Python Environment Variables#Environment variables are written as >>> 'HOME' in ${...} True1 followed by a name. For example, >>> 'HOME' in ${...} True3, >>> 'HOME' in ${...} True4, and >>> 'HOME' in ${...} True5 $ xonsh snail@home ~ $7 You can set (and export) environment variables like you would set any other variable in Python. The same is true for deleting them too >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL Very nice Note To update >>> 'HOME' in ${...} True6 when the xonsh environment changes set $UPDATE_OS_ENVIRON to >>> 'HOME' in ${...} True7. The Environment Itself >>> 'HOME' in ${...} True 8#All environment variables live in the built-in >>> 'HOME' in ${...} True8 (aka >>> 1 + 1 200) mapping. You can access this mapping directly, but in most situations, you shouldn’t need to If you want for example to check if an environment variable is present in your current session (say, in your awesome new >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL6 script) you can use the membership operator >>> 'HOME' in ${...} True To get information about a specific environment variable you can use the >>> 1 + 1 202 method >>> 1 + 1 20 One helpful method on the >>> 'HOME' in ${...} True8 is >>> 1 + 1 204. It can be used to temporarily set an environment variable >>> 1 + 1 21 Environment Lookup with >>> 1 + 1 2 05#The >>> 1 + 1 206 is great as long as you know the name of the environment variable you want to look up. But what if you want to construct the name programmatically, or read it from another variable? Enter the >>> 1 + 1 207 operator Warning In Bash, >>> 1 + 1 206 and >>> 1 + 1 209 are syntactically equivalent. In xonsh, they have separate meanings We can place any valid Python expression inside of the curly braces in >>> 1 + 1 205. This result of this expression will then be used to look up a value in the environment. Here are a couple of examples in action >>> 1 + 1 22 Not bad, xonsh, not bad Environment Types#Like other variables in Python, environment variables have a type. Sometimes this type is imposed based on the variable name. The current rules are pretty simple
Hơn nữa, một số biến môi trường được xác định trước được liệt kê ở đây có kiểu tĩnh. Ví dụ: * >>> 1 + 1 213. là một số nguyên và * >>> 1 + 1 214. là một phép toán xonsh sẽ tự động chuyển đổi qua lại thành các biểu diễn môi trường chưa được nhập (chỉ chuỗi) khi cần (chủ yếu bằng các lệnh quy trình con). Khi ở xonsh, bạn sẽ luôn có phiên bản đã nhập Các biến không khớp với các quy tắc trên được chuyển đổi thành chuỗi bằng cách sử dụng >>> 1 + 1 215, ngoại trừ chúng là >>> 1 + 1 216. Trong trường hợp này, chuỗi rỗng được sử dụng Dưới đây là một vài ví dụ về PATH >>> 1 + 1 23 Cũng lưu ý rằng bất kỳ đối tượng Python nào cũng có thể đi vào môi trường. Đôi khi sẽ hữu ích khi có các loại phức tạp hơn, chẳng hạn như hàm, trong môi trường. Có một số biến môi trường mà xonsh coi là đặc biệt. Chúng có thể được nhìn thấy trên trang Biến môi trường Note Trong chế độ quy trình con, việc tham chiếu một biến môi trường không xác định sẽ tạo ra một chuỗi rỗng. Tuy nhiên, trong chế độ Python, một >>> 1 + 1 217 sẽ được nâng lên nếu biến không tồn tại trong môi trường Lệnh chạy #Là một trình bao, xonsh có nghĩa là làm cho các lệnh chạy trở nên dễ dàng và thú vị. Chạy các lệnh quy trình con sẽ hoạt động như trong bất kỳ trình bao nào khác >>> 1 + 1 24 Điều này sẽ cảm thấy rất tự nhiên Python-mode vs Subprocess-mode#It is sometimes helpful to make the distinction between lines that operate in pure Python mode and lines that use shell-specific syntax, edit the execution environment, and run commands. Unfortunately, it is not always clear from the syntax alone what mode is desired. This ambiguity stems from most command line utilities looking a lot like Python operators Take the case of >>> 1 + 1 218. This is valid Python code, though it could have also been written as >>> 1 + 1 219 or >>> 1 + 1 220. So how does xonsh know that >>> 1 + 1 218 is meant to be run in subprocess-mode? For any given line that only contains an expression statement (expr-stmt, see the Python AST docs for more information), if all the names cannot be found as current variables xonsh will try to parse the line as a subprocess command instead. In the above, if >>> 1 + 1 222 and >>> 1 + 1 223 are not variables, then subprocess mode will be attempted. If parsing in subprocess mode fails, then the line is left in Python-mode In the following example, we will list the contents of the directory with >>> 1 + 1 218. Then we’ll make new variable names >>> 1 + 1 222 and >>> 1 + 1 223 and then subtract them. Finally, we will delete >>> 1 + 1 222 and >>> 1 + 1 223 and be able to list the directories again >>> 1 + 1 25 The determination between Python- and subprocess-modes is always done in the safest possible way. If anything goes wrong, it will favor Python-mode. The determination between the two modes is done well ahead of any execution. You do not need to worry about partially executed commands - that is impossible Note If you would like to explicitly run a subprocess command, you can always use the formal xonsh subprocess syntax that we will see in the following sections. For example. >>> 1 + 1 229 Quoting#Single or double quotes can be used to remove the special meaning of certain characters or words to xonsh. If a subprocess command contains characters that collide with xonsh syntax then quotes must be used to force xonsh to not interpret them >>> 1 + 1 26 Warning There is no notion of an escaping character in xonsh like the backslash (\) in bash Captured Subprocess with >>> 1 + 1 2 30 and >>> 1 + 1 2 31#The >>> 1 + 1 232 operator in xonsh executes a subprocess command and captures some information about that command The >>> 1 + 1 230 syntax captures and returns the standard output stream of the command as a Python string. This is similar to how >>> 1 + 1 230 performs in Bash. Ví dụ, >>> 1 + 1 27 Cú pháp >>> 1 + 1 231 nắm bắt thêm thông tin về lệnh, như một thể hiện của lớp có tên là >>> 1 + 1 236. Đối tượng này chứa nhiều thông tin hơn về kết quả của lệnh đã cho, bao gồm mã trả về, id tiến trình, đầu ra tiêu chuẩn và luồng lỗi tiêu chuẩn cũng như thông tin về cách đầu vào và đầu ra được chuyển hướng. Ví dụ >>> 1 + 1 28 Đối tượng này sẽ là “trung thực” nếu mã trả về của nó là 0 và nó bằng (thông qua >>> 1 + 1 237) với mã trả về của nó. Nó cũng băm vào mã trả về của nó. Chuyển đổi đối tượng thành chuỗi sẽ trả về đầu ra. Điều này cho phép một số loại tương tác mới thú vị với các lệnh quy trình con, chẳng hạn >>> 1 + 1 29 Nếu bạn lặp lại đối tượng >>> 1 + 1 236, nó sẽ tạo ra các dòng đầu ra của nó. Sử dụng điều này, bạn có thể xử lý đầu ra nhanh chóng và rõ ràng từ các lệnh. Ngoài ra, các đối tượng này hiển thị một phương thức >>> 1 + 1 239, hoạt động giống như trình vòng lặp tích hợp sẵn nhưng tăng >>> 1 + 1 240 nếu quy trình có mã trả về khác không >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]0 Bản thân các toán tử >>> 1 + 1 230 và >>> 1 + 1 231 là các biểu thức. Điều này có nghĩa là chúng ta có thể gán kết quả cho một biến hoặc thực hiện bất kỳ thao tác nào khác mà chúng ta muốn >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]1 Warning Kiểm soát công việc không được triển khai cho các quy trình con đã bắt Khi ở chế độ quy trình con hoặc bên trong quy trình con đã bắt, chúng ta vẫn có thể truy vấn môi trường bằng các biến >>> 1 + 1 206 hoặc cú pháp >>> 1 + 1 207 hoặc thêm các giá trị Python bằng toán tử >>> 1 + 1 245 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]2 Quy trình con chưa được khai thác với >>> 1 + 1 2 46 và >>> 1 + 1 2 47#Các quy trình con chưa được xử lý được biểu thị bằng toán tử >>> 1 + 1 246 và >>> 1 + 1 247. Chúng giống như các quy trình con đã bắt của >>> 1 + 1 230 theo hầu hết mọi cách. Sự khác biệt duy nhất là thiết bị xuất chuẩn của quy trình con chuyển trực tiếp qua xonsh và tới màn hình. Giá trị trả về của >>> 1 + 1 246 luôn là >>> 1 + 1 216 Trong phần sau đây, chúng ta có thể thấy rằng kết quả của >>> 1 + 1 246 được in tự động và giá trị trả về không phải là một chuỗi >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]3 Toán tử >>> 1 + 1 247 tương tự như >>> 1 + 1 231 ở chỗ nó trả về một đối tượng chứa thông tin về kết quả thực hiện lệnh đã cho. Tuy nhiên, các luồng lỗi tiêu chuẩn và đầu ra tiêu chuẩn của nó được hướng đến thiết bị đầu cuối và đối tượng kết quả không được hiển thị. Ví dụ >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]4 Đánh giá Python với >>> 1 + 1 2 45#Biểu mẫu toán tử >>> 1 + 1 257 hoạt động ở chế độ quy trình con và sẽ đánh giá mã Python tùy ý. Kết quả được thêm vào danh sách lệnh quy trình con. Nếu kết quả là một chuỗi hoặc byte, nó sẽ được thêm vào danh sách đối số. Nếu kết quả là một danh sách hoặc chuỗi không phải chuỗi khác, thì nội dung được chuyển thành chuỗi và nối vào danh sách đối số theo thứ tự. Nếu kết quả ở vị trí đầu tiên là một hàm, thì nó được coi là bí danh (xem phần Bí danh bên dưới), ngay cả khi nó không được thêm rõ ràng vào ánh xạ >>> 1 + 1 258. Nếu không, kết quả sẽ tự động được chuyển đổi thành một chuỗi. Ví dụ, >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]5 Cú pháp này có thể được sử dụng bên trong quy trình con đã bắt hoặc chưa bị bắt và có thể được sử dụng để tạo bất kỳ mã thông báo nào trong danh sách lệnh quy trình con >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]6 Do đó, >>> 1 + 1 245 cho phép chúng tôi tạo các lệnh phức tạp trong chế độ Python và sau đó cung cấp chúng cho một quy trình con khi cần. Ví dụ >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]7 Cú pháp >>> 1 + 1 245 cũng có thể được sử dụng bên trong các đối số quy trình con, không chỉ như một đối số độc lập. Ví dụ >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]8 Khi được sử dụng bên trong đối số quy trình con và >>> 1 + 1 261 đánh giá thành một lần lặp không phải chuỗi, >>> 1 + 1 245 sẽ mở rộng thành tích bên ngoài của tất cả các giá trị đã cho >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]9 Thay thế lệnh bằng >>> 1 + 1 2 63#Một cách sử dụng phổ biến của toán tử >>> 1 + 1 245 và >>> 1 + 1 230 là cho phép đầu ra của lệnh thay thế chính lệnh đó (thay thế lệnh). >>> 1 + 1 266. Xonsh cung cấp một cú pháp ngắn cho hoạt động này. >>> 1 + 1 267 Xem xét ví dụ sau >>> d = {'xonsh': True} >>> d.get('bash', False) False0 Quy trình con lồng nhau #Mặc dù tôi xin bạn đừng lạm dụng điều này, nhưng có thể lồng các toán tử quy trình con mà chúng ta đã thấy cho đến nay ( >>> 1 + 1 230, >>> 1 + 1 246, >>> 1 + 1 207, >>> 1 + 1 245, >>> 1 + 1 263). Một trường hợp của >>> 1 + 1 218 ở phía bên trái của đường viền phi lý được hiển thị bên dưới >>> d = {'xonsh': True} >>> d.get('bash', False) False1 Với sức mạnh to lớn, vân vân… Note Việc lồng các toán tử quy trình con này bên trong >>> 1 + 1 230 và/hoặc >>> 1 + 1 246 hoạt động vì nội dung của các toán tử đó được thực thi trong chế độ quy trình con. Vì >>> 1 + 1 245 và >>> 1 + 1 207 chạy nội dung của chúng ở chế độ Python, nên không thể lồng các toán tử quy trình con khác bên trong chúng Để hiểu cách xonsh thực thi các lệnh của quy trình con, hãy thử đặt $XONSH_TRACE_SUBPROC thành >>> 'HOME' in ${...} True7. >>> d = {'xonsh': True} >>> d.get('bash', False) False2 ống #Trong chế độ quy trình con, xonsh cho phép bạn sử dụng ký tự >>> 1 + 1 279 để kết hợp các lệnh lại với nhau như trong các trình bao khác >>> d = {'xonsh': True} >>> d.get('bash', False) False3 Điều này chỉ khả dụng trong chế độ quy trình con vì >>> 1 + 1 279 nếu không thì là toán tử Python. Nếu bạn không chắc đường ống là gì, có rất nhiều tài liệu tham khảo tuyệt vời ngoài kia. Bạn sẽ có thể tìm thông tin trên StackOverflow hoặc Google Quy trình con logic And#Chế độ quy trình con cũng cho phép bạn sử dụng toán tử >>> 1 + 1 281 để xâu chuỗi các lệnh quy trình con lại với nhau. Giá trị thực của một lệnh được đánh giá là liệu mã trả về của nó có bằng 0 hay không (i. e. >>> 1 + 1 282). Giống như trong Python, nếu lệnh có giá trị là >>> 1 + 1 283, các lệnh tiếp theo sẽ không được thực thi. Ví dụ: giả sử chúng tôi muốn liệt kê các tệp có thể tồn tại hoặc không tồn tại >>> d = {'xonsh': True} >>> d.get('bash', False) False4 Tuy nhiên, nếu bạn liệt kê tệp không tồn tại trước, bạn sẽ chỉ thấy lỗi >>> d = {'xonsh': True} >>> d.get('bash', False) False5 Ngoài ra, đừng lo lắng. Xonsh dịch trực tiếp toán tử >>> 1 + 1 284 thành >>> 1 + 1 281 cho bạn. Tất nhiên, nó ít Pythonic hơn, nhưng nó là trình bao của bạn Quy trình con logic Hoặc #Giống như với >>> 1 + 1 281, bạn có thể sử dụng toán tử >>> 1 + 1 287 để xâu chuỗi các lệnh quy trình con lại với nhau. Sự khác biệt, chắc chắn, là các lệnh tiếp theo sẽ chỉ được thực thi nếu nếu mã trả về khác không (i. e. thất bại). Sử dụng ví dụ về tệp từ phía trên >>> d = {'xonsh': True} >>> d.get('bash', False) False6 Điều này thậm chí không cố gắng liệt kê một tệp không tồn tại. Tuy nhiên, nếu bạn liệt kê tệp không tồn tại trước, bạn sẽ thấy lỗi và sau đó là tệp tồn tại >>> d = {'xonsh': True} >>> d.get('bash', False) False7 không bao giờ sợ hãi. Xonsh cũng dịch trực tiếp toán tử >>> 1 + 1 288 thành >>> 1 + 1 287 nữa. Your muscle memory is safe now, here with us Chuyển hướng đầu vào/đầu ra#xonsh cũng cho phép bạn chuyển hướng >>> 1 + 1 290, >>> 1 + 1 291 và/hoặc >>> 1 + 1 292. Điều này cho phép bạn kiểm soát nơi đầu ra của lệnh được gửi và nơi nó nhận đầu vào từ. xonsh có cú pháp riêng cho các hoạt động này, nhưng vì mục đích tương thích, xonsh cũng hỗ trợ cú pháp giống như Bash Các thao tác cơ bản là “ghi vào” ( >>> 1 + 1 293), “chắp thêm vào” ( >>> 1 + 1 294) và “đọc từ” ( >>> 1 + 1 295). Các chi tiết này có lẽ được giải thích tốt nhất thông qua các ví dụ Note Mục tiêu của chuyển hướng phải được phân tách bằng dấu cách, nếu không xonsh sẽ gây ra lỗi SyntaxError Đang chuyển hướng >>> 1 + 1 2 91#Tất cả các ví dụ sau sẽ thực thi >>> 1 + 1 297 và ghi đầu ra thông thường của nó (thiết bị xuất chuẩn) vào một tệp có tên là >>> 1 + 1 298, tạo nó nếu nó không tồn tại >>> d = {'xonsh': True} >>> d.get('bash', False) False8 Chúng có thể được tạo để nối thêm vào >>> 1 + 1 298 thay vì ghi đè nội dung của nó bằng cách thay thế >>> 1 + 1 293 bằng >>> 1 + 1 294 (lưu ý rằng >>> 1 + 1 294 vẫn sẽ tạo tệp nếu nó không tồn tại) Đang chuyển hướng >>> 1 + 1 2 92#Tất cả các ví dụ sau sẽ thực thi >>> 1 + 1 297 và ghi đầu ra lỗi của nó (stderr) vào một tệp có tên là >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]05, tạo nó nếu nó không tồn tại >>> d = {'xonsh': True} >>> d.get('bash', False) False9 Như trên, thay thế >>> 1 + 1 293 bằng >>> 1 + 1 294 sẽ khiến đầu ra lỗi được thêm vào >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]05, thay vì thay thế nội dung của nó Kết hợp các luồng #Có thể gửi tất cả đầu ra của >>> 1 + 1 297 (cả đầu ra thông thường và đầu ra lỗi) đến cùng một vị trí. Tất cả các ví dụ sau đây hoàn thành nhiệm vụ đó $ xonsh snail@home ~ $00 Cũng có thể hợp nhất rõ ràng thiết bị xuất chuẩn vào thiết bị xuất chuẩn để các thông báo lỗi được báo cáo ở cùng một vị trí như đầu ra thông thường. Bạn có thể làm điều này với cú pháp sau $ xonsh snail@home ~ $01 Việc hợp nhất này có thể được kết hợp với các chuyển hướng khác, bao gồm cả đường ống (xem phần về Đường ống ở trên) $ xonsh snail@home ~ $02 Điều đáng chú ý là ví dụ cuối cùng này tương đương với. >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]10 Tương tự, bạn cũng có thể gửi thiết bị xuất chuẩn tới thiết bị xuất chuẩn với cú pháp sau $ xonsh snail@home ~ $03 Đang chuyển hướng >>> 1 + 1 2 90#Cũng có thể yêu cầu một lệnh đọc đầu vào của nó từ một tệp, thay vì từ >>> 1 + 1 290. Các ví dụ sau minh họa hai cách để thực hiện điều này $ xonsh snail@home ~ $04 Kết hợp chuyển hướng I/O#Điều đáng chú ý là tất cả các chuyển hướng này có thể được kết hợp. Dưới đây là một ví dụ về chuyển hướng phức tạp $ xonsh snail@home ~ $05 Dòng này sẽ chạy >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]13 với nội dung của >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]14 được đưa vào stdin và sẽ chuyển tất cả đầu ra (thiết bị xuất chuẩn và thiết bị xuất chuẩn) sang >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]15; Công việc nền#Thông thường, khi bạn khởi động một chương trình đang chạy trong xonsh, bản thân xonsh sẽ tạm dừng và đợi chương trình đó kết thúc. Tuy nhiên, đôi khi bạn có thể muốn tiếp tục ra lệnh cho xonsh trong khi chương trình đó đang chạy. Trong chế độ quy trình con, bạn có thể bắt đầu một quy trình “trong nền” (i. e. , theo cách cho phép tiếp tục sử dụng trình bao) bằng cách thêm dấu và ( >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]18) vào cuối lệnh của bạn. Công việc nền rất hữu ích khi chạy các chương trình có giao diện người dùng đồ họa Sau đây là một ví dụ với >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]19 $ xonsh snail@home ~ $06 Lưu ý rằng lời nhắc được trả lại cho bạn sau khi bắt đầu emacs Thông thường các lệnh nền kết thúc khi đóng trình bao. Để cho phép lệnh nền tiếp tục chạy sau khi trình bao đã thoát, hãy sử dụng lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]20 không chấp nhận đối số (để từ chối công việc gần đây nhất) hoặc số lượng định danh công việc tùy ý Kiểm soát công việc#Nếu bạn bắt đầu một chương trình ở phía trước (không có dấu và), bạn có thể tạm dừng thực thi chương trình đó và quay lại dấu nhắc xonsh bằng cách nhấn Control-Z. Điều này sẽ trao quyền kiểm soát thiết bị đầu cuối trở lại xonsh và sẽ giữ cho chương trình tạm dừng ở chế độ nền Note Tạm ngưng các tiến trình qua Control-Z chưa được hỗ trợ khi chạy trên Windows Để bỏ tạm dừng chương trình và đưa nó trở lại nền trước, bạn có thể sử dụng lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]21. Để bỏ tạm dừng chương trình để chương trình tiếp tục ở chế độ nền (cho phép bạn tiếp tục truy cập vào dấu nhắc xonsh), bạn có thể sử dụng lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]22 Bạn có thể nhận danh sách tất cả các công việc hiện đang chạy bằng lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]23 Each job has a unique identifier (starting with 1 and counting upward). Theo mặc định, các lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]21 và >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]22 hoạt động trên công việc được bắt đầu gần đây nhất. Bạn có thể đưa các công việc cũ hơn lên nền trước hoặc nền sau bằng cách chỉ định ID thích hợp; . Ngoài ra, chỉ định “+” cho công việc gần đây nhất và “-” cho công việc gần đây thứ hai Chuỗi ký tự trong chế độ quy trình con #Các chuỗi có thể được sử dụng để thoát các ký tự đặc biệt trong chế độ quy trình con. Nội dung của chuỗi được chuyển trực tiếp tới lệnh quy trình con dưới dạng một đối số. Vì vậy, bất cứ khi nào bạn nghi ngờ hoặc nếu có lỗi cú pháp xonsh do tên tệp, chỉ cần bọc phần vi phạm trong một chuỗi Một trường hợp sử dụng phổ biến cho điều này là các tệp có dấu cách trong tên của chúng. Thực hành ghê tởm này từ chối chết. "Không vấn đề gì. ” xonsh nói, “Tôi có dây. ” Hãy xem nó đi $ xonsh snail@home ~ $07 Theo mặc định, tên của một biến môi trường bên trong một chuỗi sẽ được thay thế bằng nội dung của biến đó (chỉ trong chế độ quy trình con). Ví dụ $ xonsh snail@home ~ $08 Bạn có thể tránh việc mở rộng này trong một lệnh cụ thể bằng cách buộc các chuỗi được đánh giá trong chế độ Python bằng cú pháp >>> 1 + 1 245 $ xonsh snail@home ~ $09 Note Bạn cũng có thể tắt hoàn toàn việc mở rộng biến môi trường bằng cách đặt >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]28 thành >>> 1 + 1 283 Chuỗi ký tự nâng cao #Để kiểm soát tốt các thay thế biến môi trường (envvar), thay thế dấu ngoặc nhọn và thoát dấu gạch chéo ngược, có danh sách mở rộng các chữ cái
Để hoàn thành việc hiểu, hãy đặt biến môi trường >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]37 thành >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]38 và biến cục bộ >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]39 thành >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]40 và tạo một bảng cho biết cách thay đổi chuỗi theo nghĩa đen trong Python- và chế độ quy trình con Chuỗi chữ Là đối tượng trăn print( echo >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]41 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]42 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]43 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]44 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]45 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]46 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]47 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]47 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]49 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]50 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]51 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]52 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]53 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]54 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]55 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]55 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]57 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]58 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]44 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]44 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]61 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]62 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]63 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]63 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]65 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]66 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]52 >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]52 Tên tệp Globing với >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] 69#Tên tệp toàn cầu với ký tự >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]69 cũng được cho phép trong chế độ quy trình con. Điều này chỉ đơn giản là sử dụng mô-đun toàn cầu dưới vỏ bọc của Python. Xem ở đó để biết thêm chi tiết. Ví dụ, hãy bắt đầu với một loạt xonsh đáng yêu $ xonsh snail@home ~ $10 Điều này không khả dụng trong chế độ Python vì phép nhân khá quan trọng Tìm kiếm đường dẫn nâng cao với Backticks#xonsh cung cấp các cách bổ sung để tìm tên đường dẫn ngoài tính năng toàn cầu hóa thông thường, cả ở chế độ Python và chế độ quy trình con Biểu thức chính quy Globing#Nếu bạn đã từng cảm thấy rằng việc tạo khối bình thường có thể sử dụng thêm một số chỉ số octan, thì khối cầu regex chính là công cụ dành cho bạn. Bất kỳ chuỗi nào sử dụng dấu gạch ngược ( >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]71) thay vì dấu ngoặc kép ( >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]72, >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]73) được hiểu là biểu thức chính quy để khớp tên tệp với. Giống như toàn cầu hóa thông thường, một danh sách các kết quả phù hợp thành công được trả về. Ở chế độ Python, đây chỉ là danh sách các chuỗi. Trong chế độ quy trình con, mỗi tên tệp trở thành đối số riêng của nó đối với lệnh quy trình con Hãy xem minh họa với một số tên tệp đơn giản $ xonsh snail@home ~ $11 Loại tìm kiếm tương tự này được thực hiện nếu backticks được mở đầu bằng >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]74. Vậy các biểu thức sau là tương đương. >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]75 và >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]76 Khác với khớp regex, chức năng này giống như cách toàn cầu bình thường. Để biết thêm thông tin, vui lòng xem tài liệu về mô-đun >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]77 trong thư viện chuẩn Python Warning Trong Xonsh, ý nghĩa của backticks rất khác với ý nghĩa của chúng trong Bash. Trong Bash, backticks có nghĩa là chạy một quy trình con đã bắt ( >>> 1 + 1 230 trong Xonsh) Hình cầu bình thường #Trong chế độ quy trình con, toàn cầu hóa bình thường xảy ra mà không có bất kỳ cú pháp đặc biệt nào. Tuy nhiên, cú pháp backtick có một tính năng bổ sung. nó có sẵn bên trong chế độ Python cũng như chế độ quy trình con Tương tự như toàn cầu hóa regex, có thể thực hiện toàn cầu hóa bình thường (ở chế độ Python hoặc chế độ quy trình con) bằng cách sử dụng >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]79 $ xonsh snail@home ~ $12 Chữ Glob được định dạng #Sử dụng công cụ sửa đổi >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]80 với biểu thức chính quy hoặc hình cầu bình thường làm cho mẫu hình cầu hoạt động giống như một chuỗi ký tự được định dạng. Điều này có thể được sử dụng để thay thế các biến và các biểu thức khác vào mẫu hình cầu $ xonsh snail@home ~ $13 Tìm kiếm đường dẫn tùy chỉnh#Ngoài ra, nếu toàn cầu thông thường và toàn cầu biểu thức chính quy là không đủ, xonsh cho phép bạn chỉ định các chức năng tìm kiếm của riêng mình Hàm tìm kiếm được định nghĩa là một hàm của một đối số (một chuỗi) trả về danh sách các kết quả khớp có thể có với chuỗi đó. Các chức năng tìm kiếm sau đó có thể được sử dụng với backticks với cú pháp sau. >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]81 Ví dụ sau đây cho thấy hình thức của các chức năng này $ xonsh snail@home ~ $14 Đầu ra đường dẫn #Sử dụng công cụ sửa đổi >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]82 với dấu ngược regex hoặc toàn cầu sẽ thay đổi kiểu trả về từ danh sách chuỗi thành danh sách đối tượng >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]83 $ xonsh snail@home ~ $15 Đường dẫn chữ #Các đối tượng đường dẫn có thể được khởi tạo trực tiếp bằng cú pháp chuỗi p. Các đối tượng đường dẫn có thể được chuyển đổi trở lại các chuỗi đơn giản bằng str() và chuyển đổi này được xử lý hoàn toàn trong chế độ quy trình con $ xonsh snail@home ~ $16 Path object allows do some tricks with paths. Đánh cầu đường đi nhất định, kiểm tra và lấy thông tin $ xonsh snail@home ~ $17 Trợ giúp & Siêu trợ giúp với >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] 84 & >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] 85#Từ IPython, xonsh cho phép bạn kiểm tra các đối tượng có dấu chấm hỏi. Một dấu hỏi duy nhất ( >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]84) được sử dụng để hiển thị mức độ trợ giúp thông thường. Dấu hỏi kép ( >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]85) được sử dụng để hiển thị mức độ trợ giúp cao hơn, được gọi là siêu trợ giúp. Superhelp thường bao gồm mã nguồn nếu đối tượng được viết bằng Python thuần túy Hãy bắt đầu bằng cách xem phần trợ giúp cho kiểu int $ xonsh snail@home ~ $18 Bây giờ, chúng ta hãy xem siêu trợ giúp cho xonsh tích hợp sẵn cho phép regex toàn cầu $ xonsh snail@home ~ $19 Lưu ý rằng cả help và superhelp đều trả về đối tượng mà chúng đang kiểm tra. Điều này cho phép bạn xâu chuỗi trợ giúp bên trong các hoạt động khác và yêu cầu trợ giúp nhiều lần trong hệ thống phân cấp đối tượng. Chẳng hạn, hãy nhận trợ giúp đồng thời cho cả loại dict và phương thức key() của nó $ xonsh snail@home ~ $20 Tất nhiên, đối với các lệnh quy trình con, bạn vẫn muốn sử dụng lệnh >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]88 Biên dịch, Đánh giá và Thực thi#Giống như Python và Bash, xonsh cung cấp các hook tích hợp để biên dịch, đánh giá và thực thi các chuỗi mã xonsh. Để ngăn chức năng này có xung đột tên nghiêm trọng với các hàm >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]89, >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]90 và >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]91 tích hợp sẵn của Python, tất cả các từ tương đương xonsh đều thêm một 'x'. Vì vậy, đối với mã xonsh, bạn muốn sử dụng các hàm >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]92, >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]93 và >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]94. Nếu bạn không biết những thứ này làm gì, có lẽ bạn không cần chúng Bí danh #Một tích hợp xonsh quan trọng khác là ánh xạ >>> 1 + 1 258. Đây giống như một cuốn từ điển ảnh hưởng đến cách các lệnh của quy trình con được chạy. Nếu bạn đã quen thuộc với Bash >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]96 tích hợp sẵn, điều này cũng tương tự. Khớp lệnh bí danh chỉ xảy ra đối với phần tử đầu tiên của lệnh quy trình con Các khóa của >>> 1 + 1 258 là các chuỗi hoạt động như các lệnh trong chế độ quy trình con. Các giá trị là danh sách các chuỗi, trong đó phần tử đầu tiên là lệnh và phần còn lại là các đối số $ xonsh snail@home ~ $21 Bạn cũng có thể đặt giá trị thành một chuỗi. Nếu chuỗi là một biểu thức xonsh, nó sẽ tự động được chuyển đổi thành một danh sách bằng phương thức xonsh’s >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]98. Ví dụ: phần sau tạo một số bí danh cho phần mềm kiểm soát phiên bản >>> import sys >>> print(sys.version) 3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]99. Cả hai kiểu (danh sách chuỗi và chuỗi đơn) đều được hiển thị $ xonsh snail@home ~ $22 Nếu bạn chạy >>> d = {'xonsh': True} >>> d.get('bash', False) False00 với các bí danh trên có hiệu lực, lệnh sẽ giảm xuống >>> d = {'xonsh': True} >>> d.get('bash', False) False01 trước khi được thực thi Nếu chuỗi đại diện cho một khối mã xonsh, bí danh sẽ được đăng ký là >>> d = {'xonsh': True} >>> d.get('bash', False) False02, đây là bí danh có thể gọi được. Khối mã này sau đó sẽ được thực thi bất cứ khi nào bí danh được chạy. Các đối số có sẵn trong danh sách >>> d = {'xonsh': True} >>> d.get('bash', False) False03 hoặc theo chỉ mục trong biến môi trường >>> d = {'xonsh': True} >>> d.get('bash', False) False04 $ xonsh snail@home ~ $23 Note Để thêm nhiều bí danh, có toán tử hợp nhất. >>> d = {'xonsh': True} >>> d.get('bash', False) False05 Bí danh có thể gọi #Cuối cùng, nếu một giá trị bí danh là một hàm (hoặc có thể gọi khác), thì hàm này được gọi thay vì chuyển đến lệnh quy trình con. Các chức năng như vậy có thể có một trong các chữ ký sau $ xonsh snail@home ~ $24 Thêm, sửa đổi và xóa bí danh#Chúng ta có thể tự động thay đổi các bí danh hiện tại đơn giản bằng cách sửa đổi ánh xạ tích hợp. Đây là một ví dụ sử dụng một giá trị chức năng $ xonsh snail@home ~ $25 Để xác định lại bí danh, chỉ cần gán một chức năng mới, ở đây sử dụng lambda python với các đối số từ khóa $ xonsh snail@home ~ $26 Xóa bí danh cũng dễ như xóa khóa khỏi từ điển bí danh $ xonsh snail@home ~ $27 Note Các hàm bí danh thường được xác định bằng dấu gạch dưới ở đầu. Mặt khác, chúng có thể ẩn bí danh, vì các biến Python được ưu tiên hơn bí danh khi xonsh thực thi các lệnh Bí danh ẩn danh #As mentioned above, it is also possible to treat functions outside this mapping as aliases, by wrapping them in >>> 1 + 1 245. Ví dụ $ xonsh snail@home ~ $28 Bí danh không thể đọc được #Thông thường, các lệnh bí danh có thể gọi được sẽ được chạy trong một chuỗi riêng biệt để chúng có thể chạy trong nền. Tuy nhiên, một số bí danh có thể cần được thực thi trên luồng mà chúng được gọi từ. Điều này chủ yếu hữu ích cho trình gỡ lỗi và trình lược tả. Để tạo bí danh chạy ở nền trước, hãy trang trí chức năng của nó bằng trình trang trí >>> d = {'xonsh': True} >>> d.get('bash', False) False07 $ xonsh snail@home ~ $29 Bí danh không thể lấy được #Ngoài ra, các bí danh có thể gọi theo mặc định sẽ được thực thi sao cho đầu ra của chúng được ghi lại (giống như hầu hết các lệnh trong xonsh không vào chế độ thay thế). Tuy nhiên, một số bí danh có thể muốn tự chạy các lệnh ở chế độ thay thế. Do đó, bí danh có thể gọi được không thể bị bắt nếu không có hậu quả nghiêm trọng (tm). Để ngăn chặn điều này, bạn có thể khai báo một alias có thể gọi được là uncapturable. Điều này chủ yếu hữu ích cho các bí danh sau đó mở trình soạn thảo văn bản, máy nhắn tin hoặc tương tự. Để làm cho một bí danh không thể bị bắt, hãy trang trí chức năng của nó bằng trình trang trí >>> d = {'xonsh': True} >>> d.get('bash', False) False08. Điều này có lẽ được sử dụng tốt nhất cùng với trình trang trí >>> d = {'xonsh': True} >>> d.get('bash', False) False09. Ví dụ $ xonsh snail@home ~ $70 Lưu ý rằng cần phải có >>> 1 + 1 245 để chuyển danh sách python >>> d = {'xonsh': True} >>> d.get('bash', False) False11 cho lệnh quy trình con Bí danh là một cách mạnh mẽ mà xonsh cho phép bạn tương tác liền mạch với Python và quy trình con Warning Nếu biến môi trường >>> d = {'xonsh': True} >>> d.get('bash', False) False12 là Sai (mặc định), thì các bí danh Shell nước ngoài cố ghi đè lên các bí danh xonsh sẽ bị bỏ qua. Việc thiết lập biến môi trường này phải diễn ra bên ngoài nếu xonsh, i. e. trong quá trình bắt đầu xonsh Lên, Xuống, Tab #Lịch sử tìm kiếm các phím lên và xuống khớp với nhau từ đầu dòng, giống như chúng làm trong trình bao IPython Hoàn thành tab cũng có mặt. Theo mặc định, trong chế độ Python, bạn có thể hoàn thành dựa trên tên biến trong nội trang, toàn cầu và cục bộ hiện tại, cũng như từ khóa ngôn ngữ xonsh & toán tử, tệp & thư mục và tên biến môi trường. Trong chế độ quy trình con, bạn cũng hoàn thành tên của các tệp thực thi trên >>> 'HOME' in ${...} True5, khóa bí danh và hoàn thành đầy đủ Bash cho chính các lệnh đó xonsh cũng cung cấp một phương tiện sửa đổi hành vi của trình hoàn thành tab. Chi tiết hơn có sẵn trên trang Hoàn thành tab Tùy chỉnh Lời nhắc#Tùy chỉnh lời nhắc bằng cách sửa đổi >>> d = {'xonsh': True} >>> d.get('bash', False) False14, >>> d = {'xonsh': True} >>> d.get('bash', False) False15 hoặc >>> d = {'xonsh': True} >>> d.get('bash', False) False16 có lẽ là lý do phổ biến nhất để thay đổi biến môi trường Note Lưu ý rằng biến >>> d = {'xonsh': True} >>> d.get('bash', False) False14 sẽ không bao giờ được kế thừa từ quy trình mẹ (bất kể quy trình mẹ đó là trình bao nước ngoài hay phiên bản của xonsh) Biến >>> d = {'xonsh': True} >>> d.get('bash', False) False14 có thể là một chuỗi hoặc có thể là một hàm (không có đối số) trả về một chuỗi. Kết quả có thể chứa các đối số từ khóa, sẽ được thay thế tự động $ xonsh snail@home ~ $71 - làm. chuyển đổi mẫu này thành mẫu jinja và tạo các nội dung này một cách linh hoạt và đề cập về $PROMPT_FIELDS Theo mặc định, các biến sau đây có sẵn để sử dụng
Note Xem phần bên dưới trên >>> d = {'xonsh': True} >>> d.get('bash', False) False62 để biết thêm thông tin về việc thay đổi xonsh tuân theo biến môi trường >>> d = {'xonsh': True} >>> d.get('bash', False) False35 như được định nghĩa bởi virtualenv. Nếu biến này là thật, xonsh sẽ luôn thay thế một chuỗi rỗng cho >>> d = {'xonsh': True} >>> d.get('bash', False) False64. Lưu ý rằng không giống như các shell khác, >>> d = {'xonsh': True} >>> d.get('bash', False) False35 có hiệu lực ngay sau khi được đặt—không cần kích hoạt lại môi trường xonsh cũng cho phép ghi đè rõ ràng kết xuất của >>> d = {'xonsh': True} >>> d.get('bash', False) False64, thông qua biến môi trường >>> d = {'xonsh': True} >>> d.get('bash', False) False34. Nếu biến này được xác định và có bất kỳ giá trị nào khác ngoài >>> 1 + 1 216, thì >>> d = {'xonsh': True} >>> d.get('bash', False) False64 sẽ luôn hiển thị là >>> d = {'xonsh': True} >>> d.get('bash', False) False70 khi một môi trường được kích hoạt. Nó sẽ vẫn hiển thị dưới dạng một chuỗi trống khi không có môi trường nào đang hoạt động. >>> d = {'xonsh': True} >>> d.get('bash', False) False34 bị ghi đè bởi >>> d = {'xonsh': True} >>> d.get('bash', False) False35 Ví dụ $ xonsh snail@home ~ $72 Bạn cũng có thể tô màu lời nhắc của mình (hoặc in các thông báo có màu bằng chức năng >>> d = {'xonsh': True} >>> d.get('bash', False) False73) một cách dễ dàng bằng cách chèn các từ khóa như >>> d = {'xonsh': True} >>> d.get('bash', False) False74 hoặc >>> d = {'xonsh': True} >>> d.get('bash', False) False75. Màu sắc có dạng như hình bên dưới
Bạn có thể sử dụng các biến bổ sung ngoài những biến này bằng cách thêm chúng vào biến môi trường >>> d = {'xonsh': True} >>> d.get('bash', False) False62. Các giá trị trong từ điển này phải là các chuỗi (sẽ được chèn vào nguyên văn lời nhắc) hoặc các hàm đối số (sẽ được gọi mỗi khi lời nhắc được tạo và kết quả của các cuộc gọi đó sẽ được chèn vào lời nhắc). Ví dụ $ xonsh snail@home ~ $73 Các biến và hàm môi trường cũng có sẵn với tiền tố >>> 'HOME' in ${...} True1. Ví dụ $ xonsh snail@home ~ $74 Lưu ý rằng một số mục của $ xonsh snail@home ~ $044 không phải lúc nào cũng áp dụng được, ví dụ: >>> d = {'xonsh': True} >>> d.get('bash', False) False40 trả về >>> 1 + 1 216 nếu thư mục hiện tại không có trong kho lưu trữ. >>> 1 + 1 216 sẽ được hiểu là một chuỗi rỗng Nhưng hãy xem xét một vấn đề $ xonsh snail@home ~ $75 Chúng tôi muốn nhánh được hiển thị trong dấu ngoặc vuông, nhưng chúng tôi cũng không muốn dấu ngoặc (và khoảng trắng thừa) được hiển thị khi không có nhánh. Giải pháp là thêm một chuỗi định dạng lồng nhau (được phân tách bằng dấu hai chấm) sẽ chỉ được gọi nếu giá trị không phải là >>> 1 + 1 216 $ xonsh snail@home ~ $76 Dấu ngoặc nhọn hoạt động như một trình giữ chỗ, vì phần bổ sung là một chuỗi định dạng thông thường. Những gì chúng ta đang làm ở đây tương đương với biểu thức này $ xonsh snail@home ~ $77 Executing Commands and Scripts#Khi bắt đầu với cờ $ xonsh snail@home ~ $049 và một lệnh, xonsh sẽ thực hiện lệnh đó và thoát ra, thay vì vào vòng lặp lệnh Note Khi thực hiện các lệnh theo cách này các tệp điều khiển chạy (“xonshrc”) không được áp dụng. $ xonsh snail@home ~ $78 Các tập lệnh dài hơn có thể được chạy bằng cách chỉ định tên tệp chứa tập lệnh hoặc bằng cách cung cấp chúng cho xonsh qua stdin. Ví dụ: xem xét tập lệnh sau, được lưu trữ trong $ xonsh snail@home ~ $050 $ xonsh snail@home ~ $79 Tập lệnh này có thể được chạy bằng cách chuyển nội dung của nó sang xonsh >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL0 hoặc bằng cách gọi xonsh với tên tệp của nó làm đối số >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL1 tập lệnh xonsh cũng có thể chấp nhận các đối số và tham số dòng lệnh. Các đối số này được cung cấp cho tập lệnh theo hai cách khác nhau
Ví dụ: hãy xem xét một biến thể nhỏ của tập lệnh ví dụ ở trên hoạt động trên một đối số đã cho, thay vì trên chuỗi $ xonsh snail@home ~ $054 (chú ý cách sử dụng $ xonsh snail@home ~ $053 và $ xonsh snail@home ~ $052) >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL2 >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL3 Ngoài ra, nếu tập lệnh sẽ thoát nếu một lệnh không thành công, hãy đặt biến môi trường $ xonsh snail@home ~ $057 ở đầu tệp. Các lỗi trong chế độ Python sẽ đưa ra các ngoại lệ và do đó, điều này gần tương đương với Bash's $ xonsh snail@home ~ $058 Hơn nữa, bạn cũng có thể chuyển đổi khả năng in các dòng mã nguồn bằng lệnh $ xonsh snail@home ~ $059 và $ xonsh snail@home ~ $060. Điều này gần tương đương với Bash's $ xonsh snail@home ~ $061 hoặc Python's $ xonsh snail@home ~ $062, nhưng bạn biết đấy, tốt hơn Nhập Xonsh ($ xonsh snail@home ~ $ 063)#Bạn có thể nhập các tệp nguồn xonsh có phần mở rộng tệp $ xonsh snail@home ~ $063 bằng cú pháp Python thông thường. Giả sử bạn có một tệp có tên là $ xonsh snail@home ~ $065, do đó, bạn có thể thực hiện một nguồn giống như Bash vào trình bao hiện tại của mình bằng cách sau >>> $GOAL = 'Become the Lord of the Files' >>> print($GOAL) Become the Lord of the Files >>> del $GOAL4 Đó là tất cả, mọi người #Để rời khỏi xonsh, nhấn $ xonsh snail@home ~ $066, gõ $ xonsh snail@home ~ $067, gõ $ xonsh snail@home ~ $068 hoặc gõ $ xonsh snail@home ~ $069. Trên Windows, bạn cũng có thể gõ $ xonsh snail@home ~ $070 |