=============================================
-y: specify python code to exec after connect
=============================================
.. warning::
| - Please BE CAREFUL not to expose your system with this functionality.
| - Please DO NOT use this functionality for evil purposes.
**pync** can execute Python code in a separate process and connect the
process' stdin/stdout/stderr to the network socket.
Any data that comes in from the network will go to the process' stdin, and
any data that comes out from the process' stdout/stderr will be sent out to the network.
There are two options that can provide this functionality, the lowercase **-y** option
and the uppercase **-Y** option.
This section focuses on the **-y** option to execute code given as a string.
To execute code from a specified file path, see :doc:`../options/py-file-exec`.
Executing Python Code With -y
=============================
The lowercase **-y** option takes a string of python code to execute.
This option is best used when you have a simple one-liner to execute.
For example, you can create a simple echo server by reading data from
stdin (the network) and writing that same data back to stdout (the network):
.. tab:: Unix
.. code-block:: sh
pync -vly "import sys; sys.stdout.write(sys.stdin.read())" localhost 8000
.. tab:: Windows
.. code-block:: sh
py -m pync -vly "import sys; sys.stdout.write(sys.stdin.read())" localhost 8000
.. tab:: Python
.. code-block:: python
import pync
pync.run('-vly "import sys; sys.stdout.write(sys.stdin.read())" localhost 8000')
To test this server, connect to it and send it a message:
.. tab:: Unix
.. code-block:: sh
echo Hello | pync -vq -1 localhost 8000
.. tab:: Windows
.. code-block:: sh
echo Hello | py -m pync -vq -1 localhost 8000
.. tab:: Python
.. code-block:: python
import io
import pync
hello = io.BytesIO(b'Hello\n')
pync.run('-vq -1 localhost 8000', stdin=hello)
After receiving the message, the echo server should send it back
to the client which then would display on the client console.
Here, we pass a negative number to the **-q** option to ensure pync
doesn't quit immediately after EOF on stdin (after sending the "Hello" message).
Otherwise, there's a chance the client would quit before receiving
the message back from the echo server.
.. raw:: html