heepie Posted February 14, 2020 Share Posted February 14, 2020 (edited) Hello, I’m developing bookmark workflow for the minor browser. Now, I faced the problem. I’m pass Alfred Json by script filter. When I run my code by `python3`, I checked correct outputs like below: { "items": [ { "arg": "https://www.alfredapp.com/help/workflows/inputs/script-filter/json/", "subtitle": "https://www.alfredapp.com/help/workflows/inputs/script-filter/json/", "title": "Script Filter JSON Format - Workflow Input Objects - Alfred Help and Support", "uid": "https://www.alfredapp.com/help/workflows/inputs/script-filter/json/", "valid": true } ] } But I couldn’t show my result by Alfred. My code @dataclass class UrlItem: name: str url: str class EnhancedJSONEncoder(json.JSONEncoder): def default(self, o): if dataclasses.is_dataclass(o): return dataclasses.asdict(o) return super().default(o) # There is Parser class def main(): Parser.parseForJson(bookMarkPath) json.dump(dict(items=mapToAlfredJson()), sys.stdout, indent=2, sort_keys=True, cls=EnhancedJSONEncoder) return 0 def mapToAlfredJson(): alfredJsonList = [] for item in bookMarkList: alfredJsonList.append(dict( title=item.name, subtitle=item.url, arg=item.url, uid=item.url, valid=True, )) return alfredJsonList if __name__ == "__main__": code = main() sys.exit(code) Can I get your help? 😭 Edited February 17, 2020 by heepie Link to comment
deanishe Posted February 14, 2020 Share Posted February 14, 2020 What does Alfred's debugger say? Link to comment
heepie Posted February 15, 2020 Author Share Posted February 15, 2020 when I checked it by debugger, the cause is python3. I developed it on python3. But Alfred just support python2, right? Anyway, I solved the problem by replacing ‘dataclass’ to ‘namedtuble’. It’s possible to use dataclass on python3 later Link to comment
deanishe Posted February 15, 2020 Share Posted February 15, 2020 5 hours ago, heepie said: But Alfred just support python2, right? Alfred doesn't care which language you write workflows in. But you obviously can't set Language = /usr/bin/python and write Python 3 code in the Script box because /usr/bin/python is the Python 2 interpreter. If you want to use Python 3, either use Language = External Script or use Language = /bin/bash and treat the Script box like a command line. Link to comment
heepie Posted February 15, 2020 Author Share Posted February 15, 2020 (edited) Thank for your comment! Quote because /usr/bin/python is the Python 2 interpreter. is it possible to change python2 -> python3?? I couldn't find the solution 😭 I'm trying it by `External Script`. But I also faced the problem. 1. Alert popup Reason: launch path not accessible The external script may not exist, or doesn't have execute (+x) permissions. Related Workflow Info... Name: 'Bookmarks' Folder:/Library/Application Support/Alfred/Alfred.alfredpreferences/workflows/user.workflow.4119C437-9471-463E-A5AE-BC7A9185EC4E 2. Debugger Bookmarks[Script Filter] Queuing argument '(null)' So I add 'chmod +x bookmark.py'. But it's not solved Additionally, when I execute './bookmark.py', the error occur. but 'python bookmark.py' is OK. Could you help me?? Edited February 15, 2020 by heepie Link to comment
deanishe Posted February 15, 2020 Share Posted February 15, 2020 1 hour ago, heepie said: is it possible to change python2 -> python3?? I couldn't find the solution 😭 No. 1 hour ago, heepie said: So I add 'chmod +x bookmark.py'. But it's not solved Additionally, when I execute './bookmark.py', the error occur. but 'python bookmark.py' is OK. You need to add the correct shebang to your script. If python bookmark.py works in your shell, it sounds like you've installed Python 3 via Homebrew. In that case, the shebang would be #!/usr/local/bin/python If that doesn't work, run the following commands in your shell and post the output: which python python --version Link to comment
heepie Posted February 15, 2020 Author Share Posted February 15, 2020 Thank you! I solved the problem and correctly work! 👍 Quote You need to add the correct shebang to your script. Also, I studied the concept 'shebang'! Gooo :D Link to comment
heepie Posted February 17, 2020 Author Share Posted February 17, 2020 @deanishe, I have a question for 'shebang'. If I execute my script by 'shebang' like '#!/usr/local/bin/python3', it's OK. because python3 is already installed on my env But if python3 is NOT installed on other's env, my script can't be executed. Is there the way to execute my script even if python3 is NOT installed (like JVM)? 🤔 Link to comment
deanishe Posted February 17, 2020 Share Posted February 17, 2020 2 hours ago, heepie said: Is there the way to execute my script even if python3 is NOT installed (like JVM)? No. At least not a good one. That's why most workflows are Python 2: it's installed by default on every Mac. It is possible to create a standalone executable from a Python script, but that means bundling large parts of Python with it, and making a 30MB workflow from a 5KB script is pretty user-unfriendly. Link to comment
heepie Posted February 17, 2020 Author Share Posted February 17, 2020 Quote No. At least not a good one. That's why most workflows are Python 2: it's installed by default on every Mac. OK. I'll develop on python2 env for every users. Thank! Link to comment
deanishe Posted February 17, 2020 Share Posted February 17, 2020 6 hours ago, heepie said: OK. I'll develop on python2 env for every users. TBH, you should stick with Python 3. Python 2 is no longer supported and will be removed from macOS soon. Python 3 is installed by default on Catalina. Just not on any older versions of macOS. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now