[issue30905] Embedding should have public API for interactive mode

2019-12-21 Thread Batuhan


Batuhan  added the comment:

> (1) BUT: The value of 'a' is not printed

Isn't this the expected behavior for file input? You need to call print() in 
order to get 'a' printed.

> (2) This is OK! We run one statement at a time

As it should be for "single input". 

> (3) This is NOT OK! Python throws a SyntaxError because we used 
> Py_single_input.

Yes, because AFAIK single stands for single statement. There are 2 (assign + 
expression)

> These two requirements are in conflict, because while Py_single_input enables 
> the first, it forbids the second.

It is why there is a code module which allows implementation of REPL loops.

--
nosy: +BTaskaya

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue30905] Embedding should have public API for interactive mode

2019-06-21 Thread Joannah Nanjekye


Change by Joannah Nanjekye :


--
nosy: +nanjekyejoannah

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue30905] Embedding should have public API for interactive mode

2019-05-14 Thread STINNER Victor


Change by STINNER Victor :


--
nosy: +vstinner

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue30905] Embedding should have public API for interactive mode

2017-07-11 Thread Stephen Kelly

New submission from Stephen Kelly:

Consider the following three snippets:


1) 

const char* sourceCode = 
"a = 9\n"
"a";
// This is OK! Python runs both lines.
// BUT: The value of 'a' is not printed
PyRun_StringFlags(sourceCode, Py_file_input, localDictionary, localDictionary, 
0);


2)

// This is OK! We run one statement at a time:
PyRun_StringFlags("a = 9", Py_single_input, localDictionary, localDictionary, 
0);
// Python prints the value of 'a' because we use Py_single_input!
PyRun_StringFlags("a", Py_single_input, localDictionary, localDictionary, 0);


3)

const char* sourceCode = 
"a = 9\n"
"a";
// This is NOT OK! Python throws a SyntaxError because we used Py_single_input.
PyRun_StringFlags(sourceCode, Py_single_input, localDictionary, 
localDictionary, 0);




The intention is to be able to run script code in an interpreter built into an 
application, and to maintain two user features:

1) The behavior is the same as the standard python interpreter with regard to 
printing values automatically without requiring the print() statement.
2) It is allowed to copy/paste possibly multiple lines/statements and execute 
them

These two requirements are in conflict, because while Py_single_input enables 
the first, it forbids the second.

I have worked around this by using internal API in Python-ast.h and setting 
`mod->kind = Interactive_kind;` before calling `PyAST_CompileEx`, but that 
should not be needed.

--
components: Interpreter Core
messages: 298162
nosy: steveire
priority: normal
severity: normal
status: open
title: Embedding should have public API for interactive mode
versions: Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com