Subprocess STDOUT is not Live - python-3.x

After looking through pretty much all relevant articles and trying everything, I can't make this work, so many thanks in advance for taking a look.
I wrote the following code to activate second script from the first script:
proc = subprocess.Popen(['python', path_calculator +
'calculator.py'], stdout=subprocess.PIPE)
for line in proc.stdout:
sys.stdout.buffer.write(line)
sys.stdout.buffer.flush()
line = str(line)
line = line[2:]
line = line[:-3]
The point of this code is to get the live output of the 'calculator' in the first script, because other scripts are depending on that output.
The code does provide the correct output, but only when the 'calculator' finishes. It then outputs all data in one go. That's not sufficient. I need the output the moment it comes out of the 'calculator'.
Funny thing is that it actually works on my mac, but I can't get it to work on Windows.
** A few hours later now, I found out that it's not my Mac that it works on, but it's Pycharm (which I use on my mac) that it works on. If I run it in the terminal on my mac it doesn't work either.
Any suggestions?

Related

Linux Ubuntu how to start standard application scribus from python eclipse anaconda

I edited my question, hope it is described better now.
I am working on a software that gives me a nice PDF with lots of matplotlib graphics, depending on the data I get.
So think of a database of pages and then the software decides which pages are chosen and filled with changed images, The text stays the same.
So for instance for data1 I get page1-4 and page7 and page 9. For data2 I get page1-4 and page6. Saved as PDF. I am doing this manually with Quark which needs to be changed. I hope I can figure out the scripting to do so.
But for starters I cant start scribus from the developing enviroment. Eclipse Anaconda on Ubuntu.
import subprocess
subprocess.run('scribus')
works fine in terminal, but gives me an error in Eclipse which I cant figure out.
File "/home/b256/anaconda3/envs/test/lib/python3.7/site.py", line 178
file=sys.stderr)
^
SyntaxError: invalid syntax
This seems to be some Python 2 error in the site.py file
???? Is this some anaconda python path error ??
It's not really clear to me, what you want to achieve, but you're welcome to have a look at a script of mine:
https://github.com/aoloe/scribus-script-repository/blob/master/imposition/imposition.py
This is probably a bit more complex than what you are trying to achieve:
the script gets started from the terminal,
if it notices that it has not been started from inside of Scribus (the exception on import scribus)...
... it starts Scribus with itself as the Script to be run.
the script runs again, this time from inside of Scribus...
... now there is no exception when importing scribus and the body of the script runs.
Of course, it's simpler if you start a script that launches Scribus with other scripts.
For you the most important line is probably:
call(['scribus', '-g', '-py', sys.argv[0]] + arguments + ['--', file])
It's starting Scribus from Python
with as little GUI as possible (-g) and
launches the script sys.argv[0]
with a few arguments and
after the -- tells Scribus what file to open.

How do I close a file in the terminal

I've only started doing python3 for a paper at university. I don't plan on continuing after this semester is over but I want to do the best I can in this class. However, I am having difficulties with seemingly a basic task.
I've opened a file using f = open() and I've accessed it in the terminal using less. It displays everything out nicely but it doesn't let me close the file or even continuing to code past the printed text.
It just repeats ~ on separate lines and finishes with a highlighted (END)
By typing q, you will be able to exit it

Code work in PyCharm but doesn't work when lauching through python console

I have been working on a project and in the end it's suppose to print an output in a notepad file and it works perfectly in pycharm but as soon as I launch my file with python it crash every time I execute the code
I am 100% sure that the problem lies between the line I copied and pasted and I know that if start the project in pycharm with the python console setting active it work too so it may be some right problem? that's the conclusion I came with althought I'm not sure and I don't have any idea how to fix it even with my research. Ho and I,ve checked too and my python is up-to-date
number_of_product = [0,0,0,0]
Total = 0
with open("Bill.txt", "w+") as Bill:
Bill.write("{0} ChocoMilk\n".format(number_of_product[0]))
Bill.write("{0} Katkit\n".format(number_of_product[1]))
Bill.write("{0} N&N's\n".format(number_of_product[2]))
Bill.write("{0} SourJoes\n".format(number_of_product[3]))
Bill.write("Total : {0}$".format(Total))
The result should be 5 line of text written in a notepad file.
I found the problem: I was opening the Pycharm file by clicking "Open with" python3.7 and Windows wasn't giving me all the right I needed.
You need to change the basic application that runs the program from Pycharm to Python itself.

Python - Can't reproduce console output in a file form

I'm very new to Python, with no previous experience in programming, so if my questions seem stupid, that's because they are.
I was trying to lean a bit more about the "requests" library, so I installed it and followed the instructions in this page (http://docs.python-requests.org/en/master/user/quickstart/). When I got to "Response Content", I tried to emulate the code by copying and pasting it, creating a file named pedidos.py, and running it on my terminal. But when I run it, nothing happens.
This is the code as I copied it:
import requests
r = requests.get('https://api.github.com/events')
r.text
The strangest thing is, if I open a python console in my terminal and input this code line by line, I get a output, which doesn't happen if run it through the file.
I'm fairly certain that the answer to my question is, probably, very simple, and that I will be ashamed to have asked it once someone explains it to me. But the truth is that I'm stuck and really need some help.
Thanks in advance to anyone who takes the time to answer.

Python Terminal Calls Fail to Interact with Files

I am writing a program that handles some data on a server. Throughout the program, many files are made and sent as input into other programs. To do this, I usually make the command string, then run it like so:
cmd = "prog input_file1 input_file2 > outputfile"
os.system(cmd)
When I run the command, however, the programs being called report that they cannot open the files. If I run the python code on my local computer, it is fine. When I loaded it onto the server, it started to fail. I think this is related to issues with permissions, but am not sure how I can fix this. Many of the files, particularly the output files, are being created at run time. The input files have full permissions for all users. Any help or advice would be appreciated!
Cheers!
The python code you list is simple and correct, so the problem is likely not in the two lines of your example. Here are some related areas for you to check out.
Permissions
The user running the python script must have the appropriate permission (read, write, execute). I see from comments that you've already checked this.
What command are you running
If the command is literally typed into your source code like in the example, then you know what command is being run, but if you are generating any part of it (eg. the list of operands, the name of the output file, other parameters, etc), make sure there are no bugs in the portions of your code that generate the command. For example before the call to os.system(cmd) consider including a line like print("About to execute: " + cmd) so you can see exactly what will be run.
Directly invoke the command
If all the above looks good, try to execute the command directly at a terminal on your server. What output do you get then. It's possible that the problem is with the underlying command itself rather than your python code.

Resources